因此,我试图解决一个项目Euler问题,该问题要求我们应该找到最大的主要因子600851475143。 这是我的代码:
results = dataframe_dict['articles1.csv'].query(
'the_header_name == "New York Times" '
'or the_header_name == "Atlantic"'
)
问题是该代码无法像这样大量运行。 \ i如何使它工作?
答案 0 :(得分:3)
您的程序正在执行,但是range(1, 600851475144)
只是花了很长时间。有很多更好的方法来获取素数因子,而不是先单独检查每个数字是否为除数,然后再检查其中哪些是素数。
首先,对于每对除数p * q = n
,p
或q
必须为<= sqrt(n)
,因此实际上您只需要检查其中的数字即可。 range(1, 775147)
获得其中一对的一部分,并免费获得另一对。仅此一项就足以使您的程序及时完成。但是您仍然会得到所有除数,然后必须检查其中哪些是质数。
接下来,您实际上不必完全了解这些除数的主要因素来确定它们是否为主要因素:只要找到第一个除数,就可以使用any
停止非原始因素。在这里,最多测试sqrt(num)
就足够了。 (此外,您可以从最大的除数开始,这样,一旦找到第一个除数,就可以停止循环。)
或者,找到除数后,立即将目标数除以该除数,直到不能再除数为止,然后继续使用较小的新目标数和下一个可能的除数。这样,您的所有除数都会得到保证为质数(否则,该数量已经被其素数减少了),并且您还需要更少的测试(除非数字本身就是素数。