[英]optimization of prime number generator further
Python 程序将素数列表打印到给定的限制,但问题是它必须通过跳过一个步骤来打印它们。 这意味着直到 20 的素数将是:2,3,5,7,11,13,17,19
但我必须通过跳过一个数字来打印它们,这意味着:2 5 11 17
但是使用 python 生成器 function:我已经在下面写了代码,但我想问有没有其他方法或者我可以进一步优化它。
def prime(n):
lst = []
newlist = []
if n == 1:
pass
for i in range(2,n):
for j in range(2,i//2+1):
if i%j==0:
break
else:
lst.append(i)
length = len(last)
newlist = lst[0:length:1]
for m in newlist:
yield m
for i in prime(20):
print(i)
改进
代码
def prime(n):
'''
Report every other prime up to n
'''
if n < 2:
return # No primes
yield 2 # First prime (only even prime, rest are odd)
report = False # Report flag (toggle on each prime)
for candidate in range(3, n, 2):
# Check only odd numbers
for divisor in range(2, int((candidate**0.5) + 1)):
if candidate % divisor == 0:
break
else:
# No divisors found so prime (i.e. did not hit break)
if report: # Report this prime
yield candidate
report = not report # Toggle report flag (don't report next prime)
for i in prime(20):
print(i, end = ' ')
# Out: 2 5 11 17
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.