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*i
n = 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