编写程序, 输入一个大于 2 的自然数, 然后输出小于该数字的所有素数组成的列表
import math
n=eval(input())
s=[]
a=2
for i in range(2,n):
s.append(i)
c=math.sqrt(n)
c=int(c)
while a<n:
for i in range(2,c+1):
if a % i==0:
s.remove(a)
a=a+1
s.insert(0,2)
print(s)
这个只能输出2到八中的素数,如果n=9以上之后就会报错,想问一下问题在哪里
因为问题出在这句:
s.remove(a)
在下面加 break 就好了。原因就是 a % i == 0 可能会触发多次,但是 remove 掉一个目标数字之后再次 remove,没有这个数字,所以会报错。
完整代码:
import math
n = eval(input())
s = []
a = 2
for i in range(2, n):
s.append(i)
c = math.sqrt(n)
c = int(c)
while a < n:
for i in range(2, c + 1):
if a % i == 0:
s.remove(a)
break
a = a + 1
s.insert(0, 2)
print(s)
a = eval(input("输入一个自然数:"))
if a > 2:
l1 = []
for i in range(2, a):
count = 0
for v in range(2,i):
if i % v == 0:
break
else:
count += 1
if count > i-3:
l1.append(i)
print(l1)