扩展素数列表的Python代码
我想用Python编写扩展素数列表的代码,但有些东西不起作用:扩展素数列表的Python代码,python,python-3.x,primes,Python,Python 3.x,Primes,我想用Python编写扩展素数列表的代码,但有些东西不起作用: list = [2,3,5,7] for num in range(15,30): for i in range(0,len(list)-1): if num%list[i] != 0: if i + 1 == len(list): list.append(num) else: continue
list = [2,3,5,7]
for num in range(15,30):
for i in range(0,len(list)-1):
if num%list[i] != 0:
if i + 1 == len(list):
list.append(num)
else:
continue
else:
break
print(list)
不正确的输出是:[2,3,5,7]您的问题是
for i in range(0,len(list)-1):
应该是
for i in range(0,len(list)):
python中的range
函数将在您在stop参数中指定的数字之前的数字上停止,因此您不需要自己减去1。从:
对于正步长,范围r的内容由公式r[i]=start+step*i确定,其中i>=0和r[i]
如果运行代码,您将看到程序跳入第一个
If
条件的else
部分,在那里您将中断for
循环。因此,您的程序只需删除列表并打印该列表,因为如果条件未被处理,的真实部分。解决@RobStreeting指出的问题的另一种方法(+1)是去掉范围(len())
习惯用法并使用枚举()
。我们可以通过在最后一次收集素数之后启动循环来修复@Thierrylahuille指出的缺失的11和13。最后,您不应该有一个名为list
的变量,因为这是一个保留的Python关键字。综上所述,您的代码如下所示:
primes = [2, 3, 5, 7]
for number in range(primes[-1] + 1, 50):
for i, prime in enumerate(primes, start=1):
if number % prime:
if i == len(primes):
primes.append(number)
else:
continue
else:
break
print(*primes, sep=", ")
您发布的代码可能在某种程度上不起作用?你得到了什么输出?您希望得到什么输出?对于范围(0,len(list))中的i,它应该是:
。还有,11和13呢?所有大于3的素数的形式都是6n-1或6n+1。只需查看这两种表单的编号,就可以加快搜索速度。