[英]I'm getting a weird error for printing n prime numbers
def prime(n):
if n==2 or n==3:
return True
if n==1:
return False
f=True
for i in range(2,int(n**0.5)+1):
if n%i==0:
f=False
break
return f
def n_primes(n):
primes=[2,3,5,7]
k=10
count=4
itr=[1,3,7,9]
while count!=n:
for i in itr:
if prime(k+i):
primes.append(k+i)
count+=1
k+=10
return primes
print(len(n_primes(100)))
該程序為我嘗試過的幾乎任何數字返回 n 個質數,除了 100 對 100 它返回 101 個質數我可以通過切片列表輕松獲得 100 個質數,但我想知道我的程序有什么問題我試過終止使用計數的while循環,列表的長度但結果沒有改變
不僅對於 100,對於其他數字也是一個問題。 例如:
print(n_primes(5))
[2, 3, 5, 7, 11, 13, 17, 19]
這是因為您每 4 次迭代只進行一次count!=n
檢查(在迭代完itr
的 4 個數字之后)。 另外,你應該做count<n
否則你會進入一個無限循環。 為了避免無限循環並獲得確切的素數,在增加計數后進行另一次檢查。
def prime(n):
if n==2 or n==3:
return True
if n==1:
return False
f=True
for i in range(2,int(n**0.5)+1):
if n%i==0:
f=False
break
return f
def n_primes(n):
primes=[2,3,5,7]
k=10
count=4
itr=[1,3,7,9]
while count<n:
for i in itr:
if prime(k+i):
primes.append(k+i)
count+=1
if (count>=n):
break
k+=10
return primes
print(n_primes(5)) # prints [2, 3, 5, 7, 11]
print(len(n_primes(100))) # prints 100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.