簡體   English   中英

檢查數字x在python中是否為素數的函數

[英]Function to check if number x is prime in python

到目前為止,我所做的是:

def check_prime(x):
  if x >= 2:
    for n in range(2, x - 1):
      if x % n == 0:
        return False
      else:
        return True
  else:
    return False

但是,當我檢查任何數字> = 2是否為質數時,它將返回None而不是TrueFalse check_prime(0)返回Falsecheck_prime(1)返回False 為什么任何> = 2的數字都返回None ,我該如何解決。

您的函數是錯誤的,因為您不應在循環中返回True(在您的代碼中,循環將始終運行一次)。

def check_prime(x):
    if x >= 2:
        for n in range(2, x ):
            if (x % n) == 0:
                return False
        #after the complete for n loop
        return True
    else:
        return False

檢出有效的提琴: http : //pythonfiddle.com/check-prime

除此以外,您還可以通過將x平方根(向上舍入)作為循環的終點來使您的代碼(如果願意的話)更加有趣(不要忘記+1,因為range不包括在內)。 因為一旦經過平方根,您將獲得鏡像選項。 (6×4 = 4 * 6 =20。20的平方根是5)。

問題1:問題是range(n, x-1)

如果輸入的是2或3,則range(2, x-1)將是一個空列表,因為range的第二個參數是獨占的。

由於您只在for循環內返回並且永遠不會到達那里,因此它返回None(即不返回任何內容)。

問題2:除了從不進入for循環(如果x = 2x = 3 ,您的代碼還存在一些問題。

如您所寫,它將在第一次迭代中返回。 當然,如果x % n == 0您知道x不是質數,可以返回False 但是,即使n不是x的因數,您仍然必須檢查其他潛在因素。

您應該在for循環之外而不是在其中返回True

解:

if x == 2: return True
if x%2 == 0 or x < 2: return False
for n in range(3, x/2, 2):
  if x % n == 0:
    return False
return True

這是您的固定代碼。 您有多個問題,即:

  1. 例如,當number為2 ,您進入了if循環,但是您的循環未執行,因此結果為None
  2. range(start, end)不包括end ,因此您不必編寫end - 1
  3. 您需要檢查每個數字,最多n (嗯,優化代碼時不必這樣:) ),但是如果我有一個像99 = 3 * 33這樣的數字,它就不能被2整除,並且會盡管是合成數字,但仍將其分類為素數。

您可以進行一些基本的優化,例如檢查最大為sqrt(n) ,檢查數字是否被2除以舍棄一半的選擇,等等。

def check_prime(x):
    for n in range(2, x):
        if x % n == 0:
            return False
    return True

這是一種瘋狂的方式...

def prime(x):

    factors = []
    if x <= 0:
        return False
    if x == 1:
        return False
    if x == 2:
        return True
    for n in range(2, x):
        if x % n == 0:
            factors.append(n)

    if len(factors) != 0:
        return False
    else:
        return True

暫無
暫無

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

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