【发布时间】:2021-03-17 16:06:48
【问题描述】:
我正在尝试解决 Project Euler 存档中的一个问题:https://projecteuler.net/problem=3
13195 的质因数是 5、7、13 和 29。 600851475143这个数的最大质因数是多少?
我尝试先求解 13195。我最初的想法是创建一个包含所有低于给定数字的素数的列表。我使用 Erathostenes 算法的筛子来做到这一点。然后,使用 for 循环,我遍历所有这些素数,将作为给定数字的因子的素数添加到单独的列表中。我对列表进行了排序并打印了最大的因素。当我运行脚本时,我在因子列表中得到了一个额外的数字,它不是给定数字的因子。
对于num = 13915,输出应该是 [13, 29, 5, 7] 但我得到的是 [13, 29, 377, 5, 7]
我无法弄清楚 377 的来源。我知道我的解决方案不是最有效的,但我尝试自己解决这个问题。所以我的问题是:
377 是从哪里来的? 您能提出一个更有效的方法来解决这个问题吗?
对于给您带来的不便,我深表歉意,因为我是使用 Python 解决问题的新手。
primes = []
num = 13195
factors = []
for i in range(1, num + 1):
#sieve of erathostenes
if i % 2 != 0 and i % 3 != 0 and i % 5 != 0 and i % 7 != 0 and i != 1:
primes.append(i)
if num >= 10:
primes.append(2)
primes.append(3)
primes.append(5)
primes.append(7)
sorted(primes)
for i in range(len(primes)):
prime = primes[i]
if num % prime == 0:
factors.append(primes[i])
print(factors)
factors.sort()
print(factors[len(factors) - 1])
【问题讨论】:
-
sorted(primes)什么都不做,因为你没有将结果分配给任何东西。 -
在一个数字下面找到 all 素数以分解它似乎有点矫枉过正。此外,
i % 2 != 0 and i % 3 != 0 and i % 5 != 0 and i % 7 != 0不是测试某物是否为素数的方法。请注意377 = 13*29,但您的代码将其归类为素数。 -
为了更有效地生成素数,我们有两个问题的答案非常好:stackoverflow.com/questions/2068372/… 和 stackoverflow.com/questions/2211990/…
标签: python