【发布时间】:2019-01-27 15:20:46
【问题描述】:
我编写了这个超级简单的 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
【问题讨论】:
-
尝试记忆
-
您可以将
i的搜索限制为 6k±1 形式的值,其中 k 是任意整数 -
这会在 codereview.stackexchange.com 上得到更好的回答。
-
正如@L3viathan 所说:如果
is_prime声明该数字为素数,请将其添加到(全局)列表中。is_prime那么只需要检查num是否可以被primes的元素整除。这将减少 许多 个检查。