【问题标题】:Taking too long to execute code for largest prime factor [duplicate]花费太长时间来执行最大素数的代码[重复]
【发布时间】:2019-11-10 23:16:58
【问题描述】:

我正在尝试 Project Euler 问题 3:数字 600851475143 的最大素因数是多少?我的代码适用于随机 4 位数字。但是我的代码只是没有编译。现在已经 15 分钟了。

我认为这与“算法的效率”有关。我即将进入大学学习计算机科学与工程课程,所以我认为如果我用 Python 练习编码将是一个好主意。我的代码效率不高吗?我应该在继续之前学习 CLRS 吗?我已经完成了 Python 的基础知识(来自 Udacity)。

#What is the largest prime factor of the number 600851475143 ?
factorlist=[]
def prime(num):                                             #primetesterfunction
    primecount=0
    for factors in range(2,num):
        if num%factors==0:
            return False
        else:
            primecount+=1
    if primecount==num-2:
        return True

num=int(input("Enter Number: "))
for x in range(2,num+1):
    if num%x==0 and prime(x)==True:
        factorlist.append(x)
    else:
        continue
print("The largest prime factor of {} is {}".format(num,factorlist[-1]))

现在已经 18 分钟了,仍然没有结果...

【问题讨论】:

  • Python 中没有编译这样的东西。您可能是指执行
  • 具有如此多迭代的嵌套循环需要很长时间,这不足为奇
  • 没有人说你的问题是错误的,如果你点击了我发布的任何一个链接而不是粗鲁,你会看到他们是完全相同的问题

标签: python compilation


【解决方案1】:

Python中没有编译这样的东西;你可能是指执行

不到一秒就能得到答案:

n = 600851475143

p = 2

while n > 1:
    if n % p == 0:
        while n % p == 0:
            n /= p
        largest = p
    p += 1

print(largest) # 6857

所以你的代码要么效率极低,要么完全错误。

【讨论】:

  • Pyc 文件?我已经删除了所有不需要的评论
  • 是的,从技术上讲,我不知道关于“编译”或“执行”的第一件事。我认为它们都意味着松散的执行。而且我的代码没有错。我已经测试了许多 4 位数字。我不明白为什么你会在 2 秒内得到答案。这就是为什么我问我是否应该阅读效率的理论方面。
  • 我确实理解你的代码。它整洁。
猜你喜欢
  • 2019-02-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多