概率。 3,项目欧拉

时间:2016-03-27 16:15:55

标签: python

关于Project Euler的问题3是:

13195的主要因素是5,7,13和29。 600851475143的最大主要因素是什么?

我写了一个有效的程序:

n =600851475143
i = 2
while i * i < n: #square root law
    while n % i == 0: #isolates factors
        n = n/i 
i = i + 1
print (n)

但是,当我尝试以不同的方式回答它时,我想出了这段代码:

def primes(n):
    for i in range(2,int(n**.5)):
        while n % i == 0:
            n = n / i
     print (n)
 primes(600851475143)

我的控制台返回值1.0。所以,我的主要问题是:为什么世界上会返回1.0 :(和第一个代码中的初始while循环和错误代码中的for循环之间有什么不同?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先:你的工作代码有点偶然。尝试像75这样的输入,它将失败。至于代码中的差异:

在每次迭代后评估while循环i * i < n的条件,其中in在循环体内发生变化。在这里,当你到达目标素数时,让我们假设5in都是5,并且循环停止,因为25&gt; = 5 < / p>

for for循环迭代次数更多,因为范围在开头只设置了一次,因此循环将始终迭代到范围中指定的上限。在我们概述的案例中:n = n / 5将一直执行,直到n1