2019/11/17
今天終于把這個素數的判斷搞清楚了
最開始的代碼主要是多次判斷,大概像這樣子(最開始沒有那個s,此處忽略):

而結果就會這樣子:

造成這個結果的主要原因是(以5為例)
當i取5時,j取2,判斷不是prime number 并且輸出了
同樣,j取3,4都判斷了不是并且輸出了5 is a prime number
所以最后得到了3個輸出結果
我嘗試對其改動,判斷是不是素數可以直接輸出并且停止內層回圈,沒有問題,但是當判斷不能被某數整除時,并不能判斷它就是一個素數,而是要所有j都不能整除i時才能確認它是一個素數
因此我設定了一個S來記錄j不能整除i,如果所有j都不能整除i就會輸出判定其是素數,而只要存在一個j整除i就會輸出i不是素數,并且break。
更改后:

看起來這個可行了,而事實上卻出現了這樣的結果:

9被判定了兩次,并且出現了不同結果,通過在群里交流后,大佬指出,我的break有問題
分析i=7時,j取2,判定不能整除,執行了賦值操作s=1,之后的判斷并沒有改變s的值
i=8時,j取2就直接輸出了不是素數,break
當i=9時,j取3時就輸出不是素數,但同時終止內層回圈,后面還有if陳述句進行判斷,此時s=1,因此會輸出9是素數。
修改如下

每個內層回圈都進行初始化,雖然只是改了一下s=0的位置,但效果卻截然不同
uj5u.com熱心網友回復:
結束位置直接開方就行了uj5u.com熱心網友回復:
什么意思啊



怎么要10個字
uj5u.com熱心網友回復:
不用一個個去試是否整除,除到開方的取整加一就行了
uj5u.com熱心網友回復:
結束位置直接開方就行了
什么意思啊怎么要10個字
不用一個個去試是否整除,除到開方的取整加一就行了
好像是數論的知識,沒學過



uj5u.com熱心網友回復:
通常建議把判斷是否素數包裝成一個函式,這樣就處理就隔離了,不容易混亂轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/127595.html
上一篇:gdt_base+0x7c00為什么是0x7e00,而不是0x7e00+0x7c00
下一篇:python小白求助回圈問題
