python:列表分配索引超出范围[sieve of erathostenes]
我有一个从main方法调用的类,该方法通过实现esteeofestenes来查找列表中的所有素数。然而在这条线上python:列表分配索引超出范围[sieve of erathostenes],python,Python,我有一个从main方法调用的类,该方法通过实现esteeofestenes来查找列表中的所有素数。然而在这条线上 nums[j] = 0 我得到了上面提到的错误: 列表分配索引超出范围 这是我的代码: class Prime: def is_prime(self, num): chk = False for i in range(2,num): if num % i == 0: chk = True return chk de
nums[j] = 0
我得到了上面提到的错误:
列表分配索引超出范围
这是我的代码:
class Prime:
def is_prime(self, num):
chk = False
for i in range(2,num):
if num % i == 0:
chk = True
return chk
def sieve_of_erathos(self, num):
nums = []
for i in range(2, num):
nums.append(i)
for i in range(2, num):
if i != 0:
for j in range(i+1, num):
if j % i == 0:
nums[j] = 0
primes = []
for i in range (2, num):
if nums[i] != 0:
primes.append(nums[i])
return primes
问题是数组中填充了range(2,num) 这将在数组中创建num-2个空格,这意味着您只能调用
nums[num-3]
在
您调用nums[num-1]
所以使用
for i in range(2, num+2):
nums.append(i)
相反。然后一切都应该正常这是范围内j的问题(i+1,num):我猜你的
是素数
不正确,它返回True
用于12
,我认为您的chk默认值必须为True`并且您应该False
在循环中使用它,然后使用break
that@Arman然后,主函数处理布尔输出,并相应地完成输出。在12的情况下,输出是它不是素数。在这种情况下,您应该将它重命名为is_NOT_prime
(或其他)以减少混淆。顺便说一句,如果我!=0:
是冗余的,因为2
for i in range(2, num+2):
nums.append(i)