我目前正在通過項目歐拉,這是我的嘗試(在Python中)在問題3。我跑這個,讓它大約30分鐘。在此之後,我查看了「總和」下的數字。我發現了幾個問題:其中一些數字是偶數,因此不是素數,其中一些數字甚至不是n的適當因素。當然,他們只有0.000001(通常部門產生x.99999230984或其他)。我最終停在的號碼是3145819243.0。爲什麼這是Fermat因式分解的錯誤實現?
任何人都可以解釋爲什麼會出現這些錯誤?
編輯:我對該定理的解釋基本上是,在重新排列變量的情況下,可以用n + y^2的平方根求解x,並且y將被強制直到它成爲一個整數。在此之後,實際的素因子將是x + y。
這是我的代碼。
import math
n = int(600851475143)
y = int(1)
while y >= 1:
if math.sqrt(n + (y**2)).is_integer():
x = math.sqrt(n + (y**2))
print "x"
print x
print "sum"
print x + y
if x + y > (600851475142/2):
print "dead"
else:
print "nvm"
y = y + 1
我給你一個提示:[篩分算法](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)這將拯救你的生命與這項挑戰Projecteuler和其他許多人在那裏。如果你發現它很困難,我可以使用'Sieve算法'發佈我對這個問題的答案。否則,請嘗試一下,這是最好的做法。另外,請記住一件事:Projecteuler的問題必須在不到一分鐘內解決。如果不是,你必須改變你的方法/算法/思維方式。 –
@ChihebNexus篩是好的,但理解爲什麼這種不同方法的實施不起作用甚至更好。歐拉項目的時間也沒有限制。如果你想用暴力方法,爲什麼不呢? – njzk2
@ njzk2是的,你在這裏有一點。 –