【问题标题】:Project Euler problem #3 why won't my code print my answer? [duplicate]Project Euler 问题 #3 为什么我的代码不会打印我的答案? [复制]
【发布时间】:2023-03-30 09:51:02
【问题描述】:

我使用两个 for 循环从 600851475143 开始倒数以找到最高的素数。问题是here。该代码适用于问题中给出的较小数字,但对于 600851475143 运行一分钟后它会结束而没有给出答案。问题是操作次数太多吗?

x = 600851475143
y = x-1
answer = 0

for i in range(y, 1, -1):
    if x % i == 0:
        k = i-1
        for j in range(k, 1, -1):
            if i % j == 0:
                break
            elif j == 2 and i % j == 0:
                answer = i
    if answer != 0:
        break
print(answer)

【问题讨论】:

  • 您是否尝试将打印语句放入循环中并对其进行调试?你得到了什么?
  • 记住欧拉是一位数学家。蛮力不适用于大多数问题。你需要做一些数学思考来减少计算机的计算量。
  • 如果你从低端开始寻找除数会更快,因为在这一边你可以期待大部分。如果您从顶部(从 x-1)开始,您肯定在到达 y/2 之前不会找到任何东西。其次,当您确实找到一个时,请确保实际进行划分,以便您的问题变得更小。
  • 看来问题在于计算次数。我会尝试想办法优化我的代码。谢谢大家

标签: python


【解决方案1】:

在您的代码中,您迭代循环几乎 1..600851475143 * 1..600851475142 次。因此你应该优化你的代码。

您可以浏览此链接了解一下:https://people.revoledu.com/kardi/tutorial/BasicMath/Prime/Algorithm-PrimeFactor.html

【讨论】:

    【解决方案2】:

    您正在使用 for 循环遍历从 600851475143 开始向下的数字;这是非常缓慢的。我怀疑该程序运行时间过长。所有项目的欧拉程序都应该能够在运行后 2 分钟内完成。尝试优化您的算法,使其运行得更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      相关资源
      最近更新 更多