2016-12-25 4 views
0

私は今、重要ではないプログラムを書いたが、このフェルマーの定理にあった。今問題は出力が期待通りではなかったことです。私は質問があまりにも良いまたはマークではない知っているが、私はちょうどそこに存在してはならない出力に4の出現があるというエラーを解決することはできません。私はそれをデバッグすることができません。Fermat's Little Theoremを使用して素数を計算するときの値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

*出力が期待通りではありませんでした。*予想された出力は何ですか?さらに。画像をコードとして投稿しないでください。[このメタポストを参照してください](https://meta.stackoverflow.com/q/285551/3933332)。また、[ask]と[mcve]とは何ですか? –

+0

@ bhargav-rao出力には4が含まれませんでしたが、定理は間違っていないので、どこかでエラーがあったはずです。 – TreaV

+0

あなたのエラーの説明を投稿して追加してください。 –

答えて

1

https://stackoverflow.com/a/29596459/5110035

は、基本的には、この方法は非常に正確ではありません。 コードにパターンが見つかりました。 aが5を選択した場合、a-1ノンプライムが印刷されます。だから4が来るのです。私が思う唯一の理由

def CheckIfProbablyPrime(x): return pow(2, x-1, x) == 1:7に変更し、あなたが6を得る。しかし、他のエラーは、25

として出てくるフェルマーの小定理は簡単にこのようにPythonで記述することができあなたのアルゴリズムがちょっと間違っているために4つが現れます。エラトステネスのふるい、一度それが非プライムを見つけると、4が2の倍数であるが、4がそうではないので2が素数であるなどの倍数を取り除く。それは少ない数とはるかに速くチェックします。それを見てください。

+1

'CheckIfProbablyPrime'では、複数の小さな素数をよりよくテストします。例えば、ランダムに4つの素数2,5,11,23を選択します。これは、中位の数までの誤検出の大部分を捕捉します。 'x> p'の場合にのみ素数' p'でテストを行います。 – LutzL

関連する問題