【发布时间】: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 topic 和how to ask。特别是,我们希望您在此处发布之前进行适当的研究。有 许多 网站可以教您找到数字的质因数,包括您选择的语言的代码。
标签: python performance for-loop primes