![](/img/trans.png)
[英]How to find nth prime number in python without using function code?
[英]how to find a prime number function in python
我開始回到 python 編碼,並意識到我無法弄清楚這一點。 我正在嘗試編寫一個質數函數。 有人可以幫忙嗎?
這是我的代碼:
def is_prime(x):
a = True
for n in range(2, x-1):
while n < x:
n+=1
if x % n == 0:
a = False
elif n < 2:
a = False
else:
a = True
break
break
return a
如果有人知道我做錯了什么,請告訴我。 一個月前,我嘗試過這個,但無法理解邏輯。 我想我被難住了,從來沒有尋求過幫助......另外,你認為我應該在尋求幫助之前嘗試多久?
如前所述,您可以通過檢查奇數並迭代到 num 的 sqrt 來優化代碼
import math
def isPrime(num):
if(num==1):
return False
if(num==2):
return True
if(num%2==0):
return False
i = 3
while(i<math.sqrt(num)+1):
if num%i==0:
return False
i += 2
return True
#do the inputs and check if isPrime
#print(isPrime(2))
def prime(number):
for i in range(2,number,1):
if number % i == 0:
return False
return True
entry = int(input("Please enter the number: "))
while True:
if prime(entry):
print ("It's a prime number. ")
continue
else:
print ("It's not a prime number.. ")
continue
您將輸入一個數字,然后此功能會告訴您它是否為素數。 檢查它將解決您的問題的功能。
你也可以升級你的程序的速度。 您知道質數不可能是偶數,因此您不必檢查偶數,例如 4-6-8-26。 所以在范圍函數中,即 (2,number) 在它的末尾添加“2”。 像 (3,number,2) 那么程序不會檢查偶數。
另外一個因子不能大於該數字的平方根。 所以你不必在你的主號碼之前檢查所有數字,它足以檢查你的數字平方根。 像: (2,number**0.5) 這意味着從 2 到您的數字平方根。 所以程序速度加倍。
所以函數將是:
def prime(number):
for i in range(3,(number**0.5)+1),2):
if number % i == 0:
return False
return True
第一個功能對你來說已經足夠了。 我正在處理龐大的數字,所以我必須升級我的程序的速度。
使用您的代碼,並專注於代碼結構:
def is_prime(x):
# function contents must be indented
if x == 0:
return False
elif x == 1:
return False
# your base cases need to check X, not n, and move them out of the loop
elif x == 2:
return True
for n in range(3, x-1):
if x % n == 0:
return False
# only return true once you've checked ALL the numbers(for loop done)
return True
添加一些優化:
def is_prime(x):
if x <= 1:
return False
if x == 2:
return True
for n in range(3, x**(0.5)+1, 2): # this skips even numbers and only checks up to sqrt(x)
if x % n == 0:
return False
return True
def is_prime(x):
for n in range(2, x-1):
if n == 0:
return False
elif n == 1:
return False
elif n == 2:
return True
elif x % n == 0:
return False
else:
return True
你做錯了什么,每次在循環中執行前三個 if elif 塊。 因此,它們應該在 for 循環之外。 還。
if x%n==0:
return True
沒事。 但后來
else:
return True
是錯誤的,因為只要第一個 n 不划分 x,它就會返回 Composite。 所以,
return True
塊必須在 for 循環之外。 其他優化可自行完成。
這就是我解決它的方法
def is_prime(n):
if n==1:
print("It's not a Prime number")
for z in range(2,int(n/2)):
if n%z==0:
print("It's not a Prime number")
break
else:
print("It's a prime number")
或者如果你想返回一個布爾值
def is_prime(n):
if n==1:
return False
for z in range(2,int(n/2)):
if n%z==0:
return False
break
else:
return True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.