簡體   English   中英

在 Python 中查找下一個素數

[英]Find the next prime number in Python

我有一個函數,它接受一個數字(例如 5)並返回輸入數字之后的第一個素數(在本例中為 7)。

這是我的代碼:

def prime(n):
    np=[]
    isprime=[]
    for i in range (n+1,n+200):
        np.append(i)
    for x in range(2,199):
        for j in np:
            if x%j!=0:
                isprime.append(x)
    return min(isprime)

但是,此代碼不起作用(它總是返回 2)。 錯誤在哪里?

你有一些錯誤,最值得注意的是np顯然意味着是潛在的素數(它從n+1開始,這是第一個符合你的標准的潛在數字“輸入數字之后的第一個素數” ),但你添加x到您的主要列表,從range(2,199) ,您應該使用:

isprime.append(j)

因此,您的素性測試也是錯誤的,您應該使用:

j % x != 0

最后,如果該條件在一種情況下為真,則不能附加數字,它必須在所有情況下都為真(其中 x 是滿足2 <= x < j的整數),因此您應該切換第二個一組 for 循環( x循環應該是內循環),並且您還應該只循環到j-1 (被測試的數字)。 此外,如果j % x == 0 ,您應該選擇添加項目:

for ...:
    val_is_prime = True
    for ...:
        if j % x == 0:
            val_is_prime = False
            break
    if val_is_prime:
        isprime.append(j)

這導致以下代碼:

def prime(n):
    np=[]
    isprime=[]
    for i in range (n+1,n+200):
        np.append(i)
    for j in np:
        val_is_prime = True
        for x in range(2,j-1):
            if j % x == 0:
                val_is_prime = False
                break
        if val_is_prime:
            isprime.append(j)
    return min(isprime)

並測試運行:

>>> prime(5)
7
>>> prime(13)
17
>>> prime(23)
29

請注意,還可以進行其他一些效率改進,但此答案側重於錯誤而不是改進

試試這個,我發現的最pythonic和最清晰的方法(但可能不是最有效的):

def is_prime(x):
    return all(x % i for i in range(2, x))

def next_prime(x):
    return min([a for a in range(x+1, 2*x) if is_prime(a)])

print(next_prime(9))

https://www.geeksforgeeks.org/python-simpy-nextprime-method/

from sympy import *
  
# calling nextprime function on differnet numbers 
nextprime(7) 
nextprime(13) 
nextprime(2)

輸出:

11 17 3

此代碼工作。

def prime(n):
    next_prime = n + 1
    prime = True
    while True:
        for i in range(2, next_prime):
            if next_prime%i ==0:
                prime = False
                break
        if prime:
            return next_prime
        else:
            next_prime = next_prime + 1
            if next_prime % 2 == 0:
                next_prime = next_prime + 1
            prime = True


if __name__=="__main__":
    print(prime(5))

這是一個工作示例。

inputNumber = int(input("Enter number to find next prime: "))

def nextPrime(inputNum):

    for nextNumToChk in range(inputNum+1, inputNum +200):
        if nextNumToChk > 1:
            # If num is divisible by any number between 2 and val, it is not prime
            for i in range(2, nextNumToChk):
                if (nextNumToChk % i) == 0:
                    break
            else:
                #found the prime
                return nextNumToChk

result = nextPrime(inputNumber)
print "Next Prime is : ",result

輸出:-

Enter number to find next prime: 5
Next Prime is :  7
def is_prime(n):
    # Corner case
    if n <= 1:
        return False
    # Check from 2 to n-1
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

def first_prime_over(n):
    prime_number = (i for i in range(n) if is_prime(i))
    try:
        for i in range(0,n):
            (next(prime_number))
    except StopIteration:
        prime_number_next = (i for i in range(n,n+1000) if is_prime(i))
        print(next(prime_number_next))
first_prime_over(10)

試試這個:

def find_next_prime(n):
    return find_prime_in_range(n, 2*n)

def find_prime_in_range(a, b):
    for c in range(a, b):
        for i in range(2, c):
            if c % i == 0:
                break
        else:
            return c
    return None

def main():
    n = int(input('Find the next prime number from: '))
    print(find_next_prime(n+1))

if __name__ == '__main__':
    main()

n = int(input("輸入一個數字"))

而真:

n+=1

for  x in range(2,n):

    if n%x==0:

        break

else:

    print("next prime number is",n)

    break

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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