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:

我编写了这个超级简单的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:
            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()函数。在这里,您可以存储跑步记录中的值,并在下一次开始时从这一点开始

示例:

  • 在第一次运行中,计算n=5000的所有素数。你会得到一些结果=x 你以5000英镑买x
  • 在第二次运行中,您可能输入10.000作为您的指定输入。现在您不需要再次从2开始,但您可以从存储的结果开始,并从5001继续计算。加上结果就是你10.000的结果

  • 尝试记忆您可以将搜索
    i
    限制为6k±1形式的值,其中k是任何整数。在codereview.stackexchange.com上回答这个问题会更好。尝试@L3viathan说:如果
    is_prime
    声明数字为prime,请将其添加到(全局)列表中
    是素数
    则只需检查
    num
    是否可被
    素数的元素整除。这将大大减少支票。