[英]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.