【发布时间】:2017-05-06 01:40:37
【问题描述】:
我目前正在通过 Project Euler 工作,这是我在问题 3 中的尝试(在 Python 中)。我运行了它并让它运行了大约 30 分钟。在此之后,我查看了“sum”下的数字。我发现了几个问题:其中一些数字是偶数,因此不是素数,其中一些数字甚至不是 n 的适当因数。当然,它们仅相差 0.000001(通常除法产生 x.99999230984 或其他)。我最终停在的号码是 3145819243.0。
谁能解释为什么会出现这些错误?
编辑:我对定理的解释基本上是,通过重新排列变量,您可以用 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
【问题讨论】:
-
我给你一个提示:Sieve algorithm 这将通过 Projecteuler 和那里的许多其他人的挑战来挽救你的生命。如果您觉得很难,我可以使用
Sieve algorithm发布我对这个问题的回答。否则,请自己尝试,这是最佳做法。另外,请记住一件事:Projecteuler 的问题必须在不到一分钟的时间内解决。如果没有,你必须改变你的方法/算法/思维方式。 -
@ChihebNexus 筛子很好,但是理解为什么这种不同方法的实现不起作用会更好。欧拉项目的问题也没有时间限制。如果想使用蛮力方法,为什么不呢?
-
@njzk2 是的,你说得对。
标签: python math factorization