[英]My python program won't execute or show anything in the terminal
所以我试图解决一个项目欧拉问题,要求我们找到最大的素数因子600851475143.这是我的代码:
factors = [i for i in range(1,600851475144) if 600851475143%i is 0]
prime_factors = []
for num in factors:
factors_of_num = [i for i in range(1, num+1) if num%i is 0]
if factors_of_num == [1, num]:
prime_factors.append(num)
print(max(prime_factors))
问题是这个代码不会像这样大量运行。 怎么可以\\我得到这个工作?
你的程序正在执行,但是range(1, 600851475144)
只是花了很长时间才开始运行rrrrrrrrrrrrrrrrrrrrr。 有更好的方法来获得素数因子,而不是首先单独检查每个数字是否为除数然后检查哪些是素数。
首先,对于每对除数p * q = n
, p
或q
必须<= sqrt(n)
,所以你实际上只需要检查range(1, 775147)
的数字range(1, 775147)
来得到一个部分这些对,并免费获得另一对。 仅此一项就足以让您的计划及时完成。 但你仍然得到所有的除数,然后必须检查其中哪些是素数。
接下来,你实际上不必得到那些除数的所有素因子来确定它们是否是素数:你可以在找到第一个非原始因子时立即停止使用any
。 在这里,测试高达sqrt(num)
就足够了。 (另外,你可以从最大的除数开始,所以你可以在找到第一个除数后立即停止循环。)
或者,一旦找到除数,将目标数除以该除数,直到它不再被除数,然后继续使用新的较小目标数和下一个可能的除数。 这样,所有的除数都保证是素数(否则数字已经被其素因子减少了),并且你还需要更少的测试(除非数字本身是素数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.