[英]Prime numbers and tuples
我是 python 的初学者,我正在解决一个我无法解决的问题。
我应该做什么:创建一个带有素数的元组列表,范围是两个数字(也是素数),并且该列表中的元组应该只包含 2 个素数 p 和 p+2
例如:给定范围 (11, 31) 返回列表 = [(11, 13), (17, 19), (29, 31)]
这是我的代码
def twin_primes(a: int, b:int) -> List[Tuple[int, int]]:
list_primes = []
list_final = []
for val in range (a, b+1):
if val > 1 :
for n in range(2, val):
if (val % n) == 0:
break
else:
list_primes.append(val)
for val in list_primes:
print(val)
list_final.append((list_primes[val], list_primes[val + 2]))
return list_final
print(twin_primes(11,31))
在第一个循环中,我确定该范围内的哪些数字是素数,append 它们到list_primes
在第二个循环中,我尝试将list_primes
和 append 中的素数作为元组放入list_final
它告诉我:
list_final.append((list_primes[val], list_primes[val + 2]))
IndexError:列表索引超出范围*
有人可以帮我吗? 我想我理解这个错误,但我不知道如何修复代码,所以它只需要p
, p+2
进入一个元组,然后它会需要另一对等等......它甚至必须忽略 23虽然它是质数。
您对双胞胎进行迭代的逻辑是不正确的。 val
设置为列表本身中的元素,而不是索引。 您将其视为索引。 您需要迭代一系列数字,而不是元素本身。 我建议使用步长为 2 的范围。
list_primes = []
list_final = []
for val in range (a, b+1):
if val > 1 :
for n in range(2, val):
if (val % n) == 0:
break
else:
list_primes.append(val)
for i in range(0, len(list_primes) - 1, 2):
list_final.append((list_primes[i], list_primes[i + 1]))
return list_final
当 a = 11
和 b = 31
时,这会产生[(11, 13), (17, 19), (23, 29)]
。
但是您的逻辑仍然需要进行一些调整,因为当 a = 50
和 b = 100
时,这会产生[(53, 59), (61, 67), (71, 73), (79, 83), (89, 97)]
,显然这是不正确的。
val
不是list_primes
的索引,它是它的一个元素。 您需要 append 一个包含val
和val+2
到list_final
的元组,但前提是val+2
在素数列表中。
for val in list_primes:
if val+2 in list_primes:
list_final.append((val, val+2))
这可以使用enumerate()
来改进,因为如果val+2
存在,它总是会成为下一个素数。
for i, val in enumerate(list_primes[:-1]):
if list_primes[i+1] == val + 2:
list_final.append((val, val+2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.