2016-12-25 58 views
0

我寫了一個現在並不重要的程序,但它是在這個費馬定理上的。現在的問題是產量不像預期的那樣。我知道這個問題不是太好或不符合標準,但我不能解決這個錯誤,即在輸出中出現了4個錯誤,而這個錯誤不可能存在。我無法調試它。使用費馬小定理計算素數時的值4

定理: This Image

for x in range(1,100): 
m=5**(x-1) 
if m%x>1:  
    pass 
else: 
    print"prime",x 

輸出是這樣的:

This is output

+0

*產量與預期不符*,預期產量是多少?另外。請勿將圖片作爲代碼發佈,[請參閱此meta post](https://meta.stackoverflow.com/q/285551/3933332)。另請參見[問]和什麼是[mcve] –

+0

@ bhargav-rao輸出將不包括4(見附圖),但它有定理沒有錯,所以一定有錯誤 – TreaV

+0

請您[編輯]您的發佈並在那裏添加你的錯誤的描述。 –

回答

1

一個完美的解釋這裏找到:https://stackoverflow.com/a/29596459/5110035

基本上這種方法不是很準確。 我在你的代碼中找到了一個模式。如果選擇a 5,則打印非素數a-1。這就是爲什麼4出現。將其更改爲7,你會得到6,還包括其他錯誤,拿出比如25

費馬小定理可以很容易地用Python寫的是這樣的:

def CheckIfProbablyPrime(x): return pow(2, x-1, x) == 1

的唯一原因,我認爲四個出現是因爲你的算法有點不正確。 Eratosthenes的篩子,一旦它發現一個非素數,然後擺脫它的倍數,例如4是2的倍數,但2是質數,因爲4不是。它檢查的數量更少,速度更快。研究一下。

+1

在'CheckIfProbablyPrime'中可以更好地測試多個小素數,例如隨機選取2,5,11,23四個素數,這應該可以捕獲大部分誤報,直到中等大小的數字。只有在'x> p'的情況下才用'p'來執行測試。 – LutzL