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循环之间有什么不同?
谢谢!
答案 0 :(得分:1)
首先:你的工作代码有点偶然。尝试像75这样的输入,它将失败。至于代码中的差异:
在每次迭代后评估while循环i * i < n
的条件,其中i
和n
在循环体内发生变化。在这里,当你到达目标素数时,让我们假设5
,i
和n
都是5,并且循环停止,因为25
&gt; = 5
< / p>
for for循环迭代次数更多,因为范围在开头只设置了一次,因此循环将始终迭代到范围中指定的上限。在我们概述的案例中:n = n / 5将一直执行,直到n
为1