现在的位置: 首页 > 综合 > 正文

算法 – 编一个程序求质数的和

2014年05月18日 ⁄ 综合 ⁄ 共 601字 ⁄ 字号 评论关闭

编一个程序求质数的和,例如F(7) = 2+3+5+7+11+13+17=58。

 

方法1:

对于从2开始的递增整数n进行如下操作:

用 [2,n-1] 中的数依次去除n,如果余数为0,则说明n不是质数;如果所有余数都不是0,则说明n是质数,对其进行加和。

空间复杂度为O(1),时间复杂度为O(n^2),其中n为需要找到的最大质数值(例子对应的值为17)。

 

方法2:

可以维护一个质数序列,这样当需要判断一个数是否是质数时,只需判断是否能被比自己小的质数整除即可。

对于从2开始的递增整数n进行如下操作:

用 [2,n-1] 中的质数(2,3,5,7,开始时此序列为空)依次去除n,如果余数为0,则说明n不是质数;如果所有余数都不是0,则说明n是质数,将此质数加入质数序列,并对其进行加和。

空间复杂度为O(m),时间复杂度为O(mn),其中m为质数的个数(例子对应的值为7),n为需要找到的最大质数值(例子对应的值为17)。

 

方法3:

也可以不用除法,而用加法。

申请一个足够大的空间,每个bit对应一个整数,开始将所有的bit都初始化为0。

对于已知的质数(开始时只有2),将此质数所有的倍数对应的bit都改为1,那么最小的值为0的bit对应的数就是一个质数。对新获得的质数的倍数也进行标注。

对这样获得的质数序列累加就可以获得质数和。

空间复杂度为O(n),时间复杂度为O(n),其中n为需要找到的最大质数值(例子对应的值为17)。

抱歉!评论已关闭.