我正试图通过这种更普遍的方式来解决项目欧拉问题5。
被问到的问题:
2520是可以除以每个数字的最小数字 从1到10没有任何余数。
可被所有人整除的最小正数是多少 从1到20的数字?
这是我的代码,它给出了奇怪的结果 当我使用num1 = 1和num2 = 10时,我得到1260:正确答案的一半。当我使用num1 = 1和num2 = 20时,我得到正确答案为232792560的1/4。
num1 = int(input("Input lower range of primes: "))
num2 = int(input("Input upper range of primes: "))
def primes(num1,num2):
list_primes = []
for i in range(num1,num2 + 1):
for a in range(2,i):
if i % a == 0:
break
else:
list_primes.append(i)
return list_primes
primex = primes(num1, num2)
prod = 1
for p in primex:
n = 2
prod *= p
while (p**n < (num2 + 1)):
prod *= p
n += 1
break
print(primex)
print(prod)
我借用的这段代码给出了正确的结果
primes = [2,3,5,7,11,13,17,19]
prod = 1
for p in primes:
n = 2
prod *= p
while (p**n < 21):
prod *= p
n += 1
print(prod)
答案 0 :(得分:0)
主要的错误是你在一次迭代后突破了while
循环。因此,对于任何大于2的素数因子,你都会得出结果。在这些情况下,当正确的数量为2 ^ 3(10)和2 ^ 4(20)时,使用2 ^ 2作为最高因子2。如果你去30,你也会做3(平方而不是立方)。
只需删除break
声明;它不在你借来的代码中。
另外,使用2
作为下限;从1
开始,您将其包含为素数。这将使您的while
循环永久运行,因为p**n
的所有值n
为1。
原始代码的输出(10)
[1, 2, 3, 5, 7]
1260
修复代码的输出(10)
[2, 3, 5, 7]
2520
修复代码的输出(10)
[2, 3, 5, 7, 11, 13, 17, 19]
232792560