簡體   English   中英

如何在python中找到素數函數

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

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