素数(质数):除能被自己和1整除,不能被其他数整除的数叫素数,1和0既非素数也非合数。
***素数一定是不能整除2和3,但不能整除2和3的不一定是素数如35和49
def _odd_iter(n):
listE=[i for i in range(2,n+1)]
k=0
while k<len(listE):
r=listE[k]
for m in listE:
if (m%r==0) and (m!=r):
listE.remove(m)
k= k+1
# yield listE
#print('长度:',len(listE))
return listE
print(n,'以内的所有素数:',_odd_iter(100))
思路分析:
1、先生成3开头的奇数,因为偶数均不是素数
2、定义一个函数不能整除
3、通过filter过滤函数完成输出n以内的所有素数
def generateOdd(m):
k=1
while k<=m:
k=k+2
yield k
def Divisible(t):
return lambda a:a%t>0
def prime(n):
yield 2
it=generateOdd(n)
while True:
try:
k = next(it)
yield k
it = filter(Divisible(k),it)
except StopIteration as e:
print('Generator return value:', e.value)
break
tmp=80
print(tmp,'以内的所有素数:',list(prime(tmp)))
80 以内的所有素数: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79]