欧勒斯问题№3,代码在大数字上出现问题

2024-06-28 20:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在学习Python,并练习euler的问题。 我被困在第三个问题上,我的代码对大数字不起作用,但对其他数字起作用

n = 600851475143 
x = 0
for i in range(2,n):
    if(n%i == 0):
        if(x < i): x = i
print(x)

控制台只是没有得到任何结果和故障。 P.Shttps://projecteuler.net/problem=3

(抱歉我的英语不好)


Tags: 代码infornetifrange数字故障
3条回答

检查此代码将节省大量时间

使用sqrt进行优化

from math import sqrt
def Euler3(n):
    x=int(sqrt(n))
    for i in range(2,x+1):
        while n % i == 0:
            n //= i
            if n == 1 or n == i:
                return i
    return n
n = int(input())
print(Euler3(n))

另外,请检查我的Euler git repo

python2中只有6种解决方案,虽然很旧,但它们都经过了很好的优化

它正在运行,但所需的时间是巨大的。 您可以通过以下代码进行检查,它将继续打印x

n = 600851475143
x = 0
for i in range(2, n):
    if n % i == 0:
        if x < i:
            x = i
            print(x)

为了节省时间,您可以尝试以下代码而不是您的代码:

n = 600851475143
x = 0
for i in range(2, n):
    if n % i == 0:
        x = n // i
        break
print(x) 

即时打印8462696833。但正如@seesharper在评论中所说,这只是最大的因素,而不是一个主要的因素。所以这不是对Project Euler Problem #3的正确答案

from tqdm.auto import tqdm

n = 600851475143 
x = 0
for i in tqdm(range(2,n)):
    if(n%i == 0):
        x = i
print(x)

如果使用经典python,您的程序将持续至少40分钟,这就是您没有输出的原因。我建议您要么使用numpy来完成,要么添加一个步骤,因为我认为即使是数字也行不通

我使用tqdm来估计for循环运行所需的时间,您可以使用pip install tqdm下载它

相关问题 更多 >