当我遇到问题时,我在Project Euler上做了问题7。我的代码需要很长时间才能完成。这是我的代码。
def Problem7():
num = 0
p = 0
while p < 10002 :
prime = True
for i in range(2,num):
if (num%i==0):
prime = False
if prime:
print(num)
p = p + 1
num = num + 1
Problem7()
如何让它更快?还有另一种方式吗?
答案 0 :(得分:3)
你应该让你的生活更轻松,并在最后打印素数,这是我怀疑p变量存储的。
如评论中所述,您可以使用更智能的算法消除大量计算。
1:检查数字是否为偶数(num%2)(如果是,不是素数)
2:当除数小于或等于平方根且prime == True时,测试除数
3:如果仍然不是素数,则增加2,这样你只测试奇数(所有的evens都用num%2检查)
如果你想提高效率,那么每个非素数都至少有一个素数因子,所以你可以存储你在数组中找到的每个素数,并且只检查那些数组中最高的素数......但这是一个对这个问题不必要的额外编码。使用上述逻辑,我在测试运行的几秒钟内找到了前10,000个素数。
如果你想到数字100,你的逻辑会测试99个可能的除数。上面的逻辑测试只有2然后停止。最糟糕的情况是去平方根只有2,3,5,7,9 ... 5计算而不是99。
答案 1 :(得分:1)
我使用以下方法检查数字是否为素数(在0m0.612s中运行):
import math
def is_prime(num):
if num == 0 or num == 1:
return False
if num == 2:
return True
temp = 2
while temp < math.sqrt(num) + 1:
if num % temp == 0:
return False
temp += 1
return True