輸出1000以內的素數
阿新 • • 發佈:2018-10-15
bre n) 研究 結果 直接 highlight 一個數 區分 printf
記得以前也寫過,當時不會寫是看了別人的答案才寫出來的,今天再寫發現還是不會寫,看來上次是根本就沒有學會呀,不過苦思冥想還是想出來一種不那麽好的方法,好在自己理順了思路,是自己研究出來的成果。
輸出1000以內的素數,那麽只需要每次取出一個數,然後把這個數依次除以從2到它本身,看余數,如果余數有0的情況,那麽一定不是素數,如果全部除完了發現都沒有余數為0的情況,那麽一定是素數。
比如判斷7是不是素數,必須看7%[2,6]的結果。
容易發現,不是素數這個條件比較容易滿足,因為只要有一個余數為0的情況就能判定,那麽在程序裏面就這麽判斷。
還有個問題,如果一7%[2,6]的過程中有一個余數位0的情況,那麽就不用往下判斷了,因為沒有必要了,可以直接break
還有一個問題,在註釋裏面說清楚了。
int main(void) { /* 輸出1000以內的質數 */ int m; int n; for (n=2;n<=1000;n++) { for (m = 2; m < n; m++) { if (n % m == 0) { break; } } /* 一個數是素數或者不是素數流程都會到達這裏 該怎麽區分這兩種情況呢? 如果是素數,那麽一定是進入循環了,那麽一定滿足 m<n而且沒來得及執行m++,因為是素數就break了。 所以m<n一定能推出n不是素數。 如果是一個數是素數,那麽意味著裏層for循環走完了,走完的原因是因為不滿足m<n這個條件了 那麽此時的m一定是等於n的。 所以m==n一定能推出n是素數 */ if(m==n) { printf("%d ",n); } } return 1; }
輸出1000以內的素數