为什么我对ProjectEuler3的回答不起作用?

2024-06-02 21:03:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经试着解决ProjectEuler问题3一段时间了。下面的代码仍然不能按我希望的方式工作。在

Question 3: The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 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运行它,但最终它必须使用更大的数字。在

我的输出是:

^{pr2}$

29比我展示的还要长。 我明白,只要找到一个“I”,这个数字不能被除以,它就打印这个数字。但我不知道如何阻止它这样做。因为最后29是正确的答案,但是它应该只给出这个答案一次和立即。在


Tags: ofthe答案代码inif方式数字
3条回答

当你找到答案时,你需要break离开你的while。在

您不是incrementing 'x'后的print num语句。在

  for i in xrange (2,num):
      if num % i == 0:
         break
      else:
         print num
  x += 1

你应该能够摆脱第二个if语句,如下所示

^{pr2}$

您可以将代码简化为下面的代码片段。它使用一个列表来存储所有候选项,如果它们不是质数,则将其删除:

import math

getal = 600851475143
x = 2 
candidates = [];
while (x < int(math.sqrt(getal)+1)):    
    if getal % x == 0:                
        candidates.append(x)
        for i in xrange (2,int(math.sqrt(x)+1)):
             if x % i == 0:
                 candidates.remove(x)
                 break        
    x = x + 1
print str(candidates).strip('[]')        

相关问题 更多 >