【发布时间】:2015-11-03 17:19:55
【问题描述】:
一段时间以来,我一直在尝试解决项目欧拉问题 #3。下面的代码仍然不能按照我想要的方式工作。
问题3:13195的质因数是5、7、13、29。
600851475143 的最大质因数是多少?
getal = 13195
x = 2
while x in xrange(2,getal):
if getal % x == 0:
num = getal / x
for i in xrange (2,num):
if num % i == 0:
x += 1
break
else:
print num
else:
x += 1
continue
如您所见,为了简单起见,我现在使用 13195 运行它,但最终它应该使用更大的数字。
我的输出是这样的:
2639 2639 2639 2639 2639 1885 1885 1885 1015 1015 1015 455 455 455 377
377 377 377 377 377 377 377 377 377 377 203 203 203 203 203 145 145
145 91 91 91 91 91 65 65 65 35 35 35 29 29 29 29 29 29 29 29 29 29 29
29 29 29 29 29 29 29 29 29 29 29 29 29 29
29 持续了一段时间,比我展示的要长。 我确实理解它只是在找到不能除以该数字的“i”后立即打印该数字。但我不知道如何防止它这样做。因为最终 29 是正确的答案,但是它应该立即给出这个答案。
【问题讨论】:
-
欧拉问题非常适合学习编码!很高兴你玩得开心。坚持下去;坚持会赢得胜利。当你学习编码时,试着用英语解释你的算法。然后将其转换为伪代码和/或 Python。当你用人类语言解释你的算法时,我想你会认为它不是正确的算法。
-
正如其他人指出的那样,这不是最好的方法 - 您可能应该生成最大数的 sqrt 的素数,然后找到最大的有效
-
在 SO 上多次询问和回答,例如here(别管“Java”语言标签,答案中有算法讨论和伪代码)。 --- 或者,this answer 有更详细的示例。
-
感谢您的回答!实际上,我试图用英语提出一种算法,然后将其翻译成代码。所以现在就是:选择“getal”可以除以的所有数字(开始除以低数字,首先得到更大的“num”)然后检查这些数字是否是素数。我知道这不是最优化的代码,但是您的建议是什么?我很想得到一些建议,以便将来改进我的算法。