【发布时间】: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