2014-11-23 71 views
-4

这是我对Project Euler Problem 3的解决方案。我已经为Project Euler编写了这个代码,但是如果我放入“49”,我会得到“49”。什么似乎是问题?欧拉项目#3 Python

n = 600851475143 
i = 2 

while (i * i < n): 
    while (n % i == 0): 
     n = n/i 
    i = i + 1 

print (n) 
+0

你在哪里投入“49”? – irrelephant 2014-11-23 01:48:32

+1

我不知道“Project Euler#3”是什么。我知道我可以检查它,但它应该是有问题的! – Tacet 2014-11-23 01:52:50

+0

我投票结束这个问题作为题外话,因为欧拉工程专门要求人们不要在网上发布回答他们的问题。对于StackOverflow来说,通过发布他们所有问题的答案来摧毁他们的网站将会是一种糟糕的形式。 – theJollySin 2015-10-23 19:20:04

回答

1

我假设你的意思是设置n = 49

你的外循环的同时,尽快检查条件i * i < n,这是不是真的i == 7,所以外循环中断,因为它击中7。将<更改为<=

但是,你的代码首先是不正确的 - 也许像这样的东西是你的意思?

n = 600851475143 
i = 2 
factors = [] 

while (i <= n): 
    while (n % i == 0): 
     n = n/i 
     factors.append(i) 
    i = i + 1 

print factors 
+0

这是错误的。 'i'在'i * i Dair 2014-11-23 01:58:59

+0

虽然他的实现对于实际问题来说速度不够快,但他对于'49'的问题是,他在最后打印出'n'而不是'i'。 – Dair 2014-11-23 01:59:58

+0

@Pound Printing'i'不打印最大的主要因素 - 尝试使用'n = 15'的原始代码。当然,答案是'5',但是'i'是4. – kevinsa5 2014-11-23 02:01:23

1

要打印要打印in ...

0

你的代码写假设有一个以上的因素,但在N = 49的情况​​下,它会证明,它只有一个就是7的因素,这样你就可以添加一条线检查,做它有一个以上的因素,如果不是那么我应该打印

0

可能是最快的方式来解决它找到所有的主要因素,然后返回最大值。

蛮力解决方案花了我不到1秒