Python 将素数的个数计算到某个较大的值
我编写了这个超级简单的python代码,将素数的数量计算到某个较大的值。问题是对于像Python 将素数的个数计算到某个较大的值,python,primes,Python,Primes,我编写了这个超级简单的python代码,将素数的数量计算到某个较大的值。问题是对于像1e+8这样的值,程序花费了太多时间,我想改进此代码以获得更快的结果和更好的性能。 代码如下: import math def is_prime(num): if num%2 ==0 and num>2: return 0 for i in range(3, int(math.sqrt(num)) + 1, 2): if num % i == 0:
1e+8
这样的值,程序花费了太多时间,我想改进此代码以获得更快的结果和更好的性能。
代码如下:
import math
def is_prime(num):
if num%2 ==0 and num>2:
return 0
for i in range(3, int(math.sqrt(num)) + 1, 2):
if num % i == 0:
return 0
return 1
def count_prime(num):
ct=0;
for i in range(2,num+1,1):
if is_prime(i)==1:
ct+=1
return ct
正如评论中所建议的,您可以开始改进is_prime()函数。 尝试其他算法,如建议的筛子或。我在一次密码学研讨会上实现了后者,这并不难。(注意:该算法是一种概率算法,但不要太在意)。 这可以为您的主要检查提供更好的时间复杂度 在此之后,您可以考虑多次运行urcount\u prime()函数。在这里,您可以存储跑步记录中的值,并在下一次开始时从这一点开始 示例:
尝试记忆您可以将搜索
i
限制为6k±1形式的值,其中k是任何整数。在codereview.stackexchange.com上回答这个问题会更好。尝试@L3viathan说:如果is_prime
声明数字为prime,请将其添加到(全局)列表中是素数
则只需检查num
是否可被素数的元素整除。这将大大减少支票。