2013-12-19 93 views
1

我試圖編寫一個函數,它需要一個整數x並返回True,如果是prime,則返回True,否則返回False。它工作正常,除了當測試121號,我不明白爲什麼。這裏是我的代碼:is_prime函數在測試121時失敗,不知道爲什麼

def is_prime(x): 
    if x < 2: 
     return False 
    elif x == 2: 
     return True 
    else: 
     for i in range(2,x): 
      if x%i == 0: 
       return False 
      else: 
       return True 

當檢查121,它似乎跳過if x%i == 0:,因爲121%11是0,但它不返回爲假。我在這裏錯過了很明顯的東西嗎我很感激我能得到的任何幫助,謝謝。哦,我正在與Python 2.7

+0

@VincentShowcaseWorkshop不是真的。你所關聯問題的所有答案都使用試驗分區,這是檢查數字是複合還是素數的最壞方法。 – Hyperboreus

+0

刪除我的評論,然後不要把他放在錯誤的方式:)歡呼您的評論。 –

回答

8

你幾乎擁有它。你只需要一個很小的變化

def is_prime(x): 
    if x < 2: 
     return False 
    elif x == 2: 
     return True 
    else: 
     for i in range(2,x): 
      if x%i == 0: 
       return False 
     return True 

,你所面臨的問題是由於這樣的事實,你不要讓你的循環完成檢查所有的數字,它返回

考慮前幾個迭代時前你在121上運行代碼:

功能說:

  • 小於2 x
    • 號去上
  • x正好2?
    • 號去
  • 對於所有的數字,2至x-1(for i in range(2,x)
    • 現在i是2
    • 是121%2正好0?
      • 沒有。去
    • 別人(當然,121%2不是0,所以我走在這裏)
      • 返回true < - 糟糕!

所以,你需要做的,是通過完成在所有這些數字的循環運行,決定返回,這是我的修補程序做什麼之前。當然(就像Joran Beasley所說的),你可以利用任何數字的除數都不比其平方根大的知識。所以你只需要檢查自己的數字的平方根:

def is_prime(x): 
    if x<2: 
     return False 
    if x == 2: 
     return True 
    else: 
     for i in xrange(2, int(sqrt(x))+1): 
      if not n%i: 
       return False 
     return True 
+5

值得注意的是,他應該可以結束他的範圍在int(sqrt(x)) –

+0

哦,真的!我會進一步'範圍(3,int(sqrt(x))''因爲他已經測試了2 – inspectorG4dget

+0

,但是他沒有測試2的可分性......除非我錯過了它 –

相關問題