首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >欧莱士问题№3,大数字上的代码结构

欧莱士问题№3,大数字上的代码结构
EN

Stack Overflow用户
提问于 2020-06-25 07:09:45
回答 4查看 72关注 0票数 3

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

代码语言:javascript
复制
n = 600851475143 
x = 0
for i in range(2,n):
    if(n%i == 0):
        if(x < i): x = i
print(x)

控制台没有得到任何结果和垃圾。P.S https://projecteuler.net/problem=3

(对不起,我的英语很差)

EN

回答 4

Stack Overflow用户

发布于 2020-06-25 07:28:24

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

代码语言:javascript
复制
n = 600851475143
x = 0
for i in range(2, n):
    if n % i == 0:
        if x < i:
            x = i
            print(x)

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

代码语言:javascript
复制
n = 600851475143
x = 0
for i in range(2, n):
    if n % i == 0:
        x = n // i
        break
print(x) 

立即打印8462696833。但正如@seesharper在评论中指出的那样,它只是最大的因素,而不是主要因素。因此,这不是项目Euler问题#3的正确答案。

票数 2
EN

Stack Overflow用户

发布于 2020-06-25 07:29:59

代码语言:javascript
复制
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下载它。

票数 1
EN

Stack Overflow用户

发布于 2020-06-25 07:58:03

检查这段代码可以节省很多时间。

利用sqrt进行优化

代码语言:javascript
复制
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))

另外,检查我的欧拉吉特回购

在python2中只有6种解决方案,而且它非常古老,但它们都经过了很好的优化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62569749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档