2014-11-24 81 views
-2

我是Python的新手,我試圖編寫一個代碼來檢查數字是否爲素數。到目前爲止,我已經寫到:Python:確定一個數是否爲素數

def main(): 
    n = input("Enter number:") 
    isprime(n) 

def isprime(): 
    x = Prime 
    for m in range (1,n+1,1) 
     result = n % m 
     print result 


main() 

我不知道如何在此之後繼續。我知道我必須定義isprime。任何幫助將不勝感激。謝謝!

+0

你知道如何做到這一點的紙,你只是有把它變成代碼的問題?或者你不知道該怎麼做?什麼是'x = Prime'? – csmckelvey 2014-11-24 22:28:22

+0

@Takendarkk我不確定如何在紙張和代碼上做到這一點。我猜X = Prime應該是消息,當它說它是真的(意味着輸入的數字是素數)。 – 2014-11-24 22:30:38

回答

2

你的第一個和最大的問題是,你需要列出n作爲參數isprime之前,你可以在isprime使用它,然後才能在main傳遞一個參數。有關更多詳細信息,請參見Defining Functions的教程。但基本上,它是這樣的:

def isprime(n): 

同樣,x = Prime是要提出一個NameError,因爲沒有什麼命名Prime。鑑於它實際上沒有做任何事情,你應該刪除它。

當然,這不會使這是一個完整的工作總理測試功能,但它是如何從你的位置開始。


下一步是考慮如何從函數返回。如果發現n的值,則顯然n不是素數,因此isprime爲false。如果你經歷了所有的可能性,並沒有發現任何分歧n,那麼isprime是真實的。因此,在正確的位置使用兩個return聲明,即可完成該功能。


一旦它至少總是返回真或假,你有錯誤修復。*

看看你,range(1, n+1, 1)得到的數字。其中兩個數字保證將任何n分開。你如何避免這個問題?


當你得到它的工作,然後你可以在優化它。如果你在維基百科上查找primality test,你可以看到一個非常簡單的方法來改進天真的試驗劃分測試。一些研究將顯示不同算法的優缺點。但是,如果您的目標足夠快,那麼通常不值得爲優化做更多的努力。


*您可能要考慮寫上一串數字電話isprime和正確答案的比較結果(你已經知道了你的頭1的頂部答案的測試程序不素數,2是素數,17是素數等)。這就是所謂的Test Driven Development,這是一個很好的方式來確保你已經涵蓋了所有可能的情況 - 包括0,1,2,3等離羣值。

1

你的isprime非常接近。第一行x = Prime是不必要的,所以讓我們擺脫這一點。

現在,讓我們來看看你下一步做什麼:
你似乎要檢查是否有完全分裂n任何數字。雖然這是正確的方法,但您在測試的數字中包含n1。這顯然是錯誤的。

還有一個錯誤:你使用n而沒有定義它(我想你希望它是你的函數的一個參數)。因此,讓我們把這個放在一起:

def isprime(n): 
    for m in range(2, n): 
     if not n%m: # m divides n perfectly 
      return False 
    return True # if n were not prime, the function would have already returned 

但要更進一步,你真的沒有檢查2n-1之間的每一個數字。你只需要2之間檢查數字n平方根:

def isprime(n): 
    for m in range(2, int(n**0.5)+1): 
     if not n%m: 
      return False 
    return True 
+1

或下一步更進一步:'返回所有(對於範圍內的m(n,n,m(2,int(n ** 0.5 + 1))) – ch3ka 2014-11-24 22:37:45

相關問題