Python 这个过程的逻辑是什么

Python 这个过程的逻辑是什么,python,math,while-loop,mathematical-optimization,python-3.4,Python,Math,While Loop,Mathematical Optimization,Python 3.4,我在研究一个问题;我发现了一个很好的例子。问题和公认的答案是: n = 600851475143 i = 2 while i * i < n: while n%i == 0: n = n / i i = i + 1 print (n) 太棒了。我仍然无法理解这个过程为何如此之快,并能在0.00001秒内找到6000亿的最大素因子。我为此尝试了大量的方法和代码,过程耗时超过1小时 谁能给我解释一下这些代码的逻辑以及为什么它超快?while循环在Pyth

我在研究一个问题;我发现了一个很好的例子。问题和公认的答案是:

n = 600851475143 
i = 2

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

print (n)
太棒了。我仍然无法理解这个过程为何如此之快,并能在0.00001秒内找到6000亿的最大素因子。我为此尝试了大量的方法和代码,过程耗时超过1小时

谁能给我解释一下这些代码的逻辑以及为什么它超快?while循环在Python中有特殊的位置吗?

表示每个大于1的整数都可以表示为素数的乘积。例如,数字2100可以这样表示:

2x2x3x5x5x7

我已经安排好了,所以最大的素因子在右边,在这个例子中是7。该算法所做的是从2开始,然后除以n,即除去该因子,直到不再需要除去模0。在除法之前,步骤会检查它是否完全可除

那么,按照代码,我们将得到i=2,n=2100,或者

2x2x3x5x5x7

2100可以被2210%2==0整除,这也是因为我们在上面的因式分解中看到了2。所以除以2,我们得到1050,或者

2 x 3 x 5 x 5 x 7

继续除以2,再除以一次,得到一个不再能被2整除的数字,即525,或

3 x 5 x 5 x 7

然后我们将i增加到3并继续。看看到最后我们将如何得到最高的素因子


第一个while循环的原因是i*in = 600851475143 i = 2 while i * i <= n: while n%i == 0: print "Dividing by %d" % i n = n / i i = i + 1 if n > 1: print n
>>> 
Dividing by 71
Dividing by 839
Dividing by 1471
6857