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