我从main方法调用这个类,它通过实现Erathostenes筛选来查找列表中的所有素数。但是在
行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
答案 0 :(得分:0)
问题是您使用范围(2,num)填充数组。
这会在数组中创建num-2个空格,这意味着您只能调用nums[num-3]
。
在
for j in range(i+1, num):
if j % i == 0:
nums[j] = 0
您致电nums[num-1]
,请使用
for i in range(2, num+2):
nums.append(i)
代替。一切都应该有效