簡體   English   中英

我在打印 n 個素數時遇到了一個奇怪的錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM