【问题标题】:Efficiency problem or endless for loops - Python效率问题或无限循环 - Python
【发布时间】:2020-09-08 17:40:07
【问题描述】:

这是我尝试在 Python 中解决 Project Euler's third problem 的代码:

13195 的质因数是 5、7、13 和 29。

600851475143 的最大质因数是多少?

由于某种原因,这没有给出答案。我知道有一个双重for循环,效率很低,但我不知道程序是否仍在运行并尝试计算,或者是否有错误。甚至可能是嵌套 for 循环中的 break 中断了所有 for 循环。我怎样才能更有效地使用这段代码?我不是要求直接完全重写我的代码,但一点点和零碎的东西会很棒。 (还有一些提示......!)

def prime_selector(primed_num):
    factors = []
    prime_factors = []
    for x in range(1, primed_num + 1):
        if primed_num % x == 0:
            factors.append(x)
    for i in factors:
        if i > 1:
            for j in range(2, i):
                if i % j == 0:
                    break
            else:
                prime_factors.append(i)
    prime_factors.sort(reverse=True)
    print(prime_factors[0])


prime_selector(600851475143)

【问题讨论】:

  • 当然,您可以在这些 for 循环中添加 print() 语句来跟踪它们的进度。 :)
  • 并不是说它是无穷无尽的,而是你试图数到 600,851,475,143,这太多了,即使对于现代计算机来说也是如此。你需要想出一个更好的策略。你调查过审判部门吗?
  • 和一个提示:对于任何合数 n,在 sqrt(n) 之上只能有一个素数。尝试找到所有其他人。
  • 请从intro tour 重复on topichow to ask。特别是,我们希望您在此处发布之前进行适当的研究。有 许多 网站可以教您找到数字的质因数,包括您选择的语言的代码。

标签: python performance for-loop primes


【解决方案1】:

我建议尝试不同的方式。 例如数字 825。 它是 355*11。最大的质数是 11。 但你可以用不同的方法得到它。

825 不能除以 2,但可以除以 3。所以 825/3=275。

275 不能被 3 或 4 整除,但可以被 5 整除。275/5=55。

55 再次 5. 55/5=11.

11 不能除以任何大于 5 且不是其自身的数字。因此它是一个素数。

这是一个暗示性的答案。如果你需要,我可以给你代码。

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多