2017-08-01 51 views
2

如何查找素數?素數是大於1的數字,只能由其自己和一個整除。確定一個數是否爲質數的一種方法如下:如何查找素數

- >如果數量< 2,然後返回False

- >如果數字是2,然後返回True - >對於i的每個值,其中i> = 2和我<號: 如果數被i整除,則返回假 - >返回True

我當前的代碼:

def is_prime(number): 
    if number == 2: 
     return True 
    elif number < 2: 
     return False 
    else: 
     for i in range(2, number): 
      if number % i == 0: 
       return False 
      else: 
       return True 
def main(): 
    print(is_prmie(1)) 
    print(is_prmie(4)) 
    print(is_prmie(7)) 

一些語法問題我不知道如何解決。 有人可以幫忙嗎? 謝謝TA!

+0

小的優化,你可以在'sqrt(number)'處停下來(確保預先計算它,因爲它是一個緩慢的操作)。例如:'100 = 50 * 2',但是在到達'50'之前就已經檢查過了'2'。 – sircodesalot

回答

1

號我建議如下:

from math import sqrt 

def is_prime(x): 
    if x < 2: 
    return False 

    if x % 2 == 0: 
    return x == 2 

    i = 3 
    while i <= sqrt(x): 
    if x % i == 0: 
     return False 
    i += 2 

    return True 

注意事項:

  • 唯一的偶數是2.循環被限制爲奇數。
  • 只有平方根以下的因素必須測試。因爲如果x = y * z且y≥sqrt(x),則z≤sqrt(x)
  • 循環中只有一個return語句。您可以儘早退出非素數,但您必須完成循環以確保數字是素數。
0

您需要撥打main()並正確書寫is_prime()

def is_prime(number): 
if number == 2: 
    return True 
elif number < 2: 
    return False 
else: 
    for i in range(2, number): 
     if number % i == 0: 
      return False 
     else: 
      return True 
def main(): 
    print(is_prime(1)) 
    print(is_prime(4)) 
    print(is_prime(7)) 
main() 
+0

如果它解決了問題,請做出投票決定:) –

0

方法調用時is_prime的拼寫錯誤。另外,你最後還沒有調用main方法。

小的改進:

for i in range(2, number): 

這條線可以如下,因爲我們並不需要它的後半段,檢查數的整除:

for i in range(2, (number/2)): 

例如檢查24是質數或不是,我們需要檢查僅12高達因爲它永遠不會是整除大於12