寫一個程式判斷質數

2013-11-07 6:22 am
請指教寫一個程式判斷某一數N是質數,無須編碼,只用FLOWCHART或PSUEDOCODE OK。

回答 (4)

2013-11-07 9:40 am
✔ 最佳答案
首先要明白咩係質數;n若是質數,不能給任何整數除盡,即2至n-1都不能除盡。
那就易辦了,只要由2開始測試,沒有一個能除盡就回覆是質數。
pseudo code 就會咁上下

先試 N > 1

是 : { 先預設 答案 R 為 TRUE ,即預定是質數,
用 FOR LOOP ,由 2 至 n-1 作餘數檢測,若餘數為0即可除盡除,設定R=FALSE
回傳 R 為答案是否質數

}
非:
{ 回傳 非質數 } // 0,1及所有負數皆定為非質數


後記:其實 FOR LOOP 無須由 2 至 N-1,只要 2 至 n/2己足夠,因為任何一個數最大可盡除不可能大過自己一半。這樣當數字大時會加快混算。
另外一件事是,無須 2,3,4,5,6,7這樣試,因為既然2除不盡,也不須試4,6,8,10..只要試3,5,7,9,11,13... (即單數),又可以加快一點。
這個題目在我第一天學PROGRAMMING時書本所說。但現時想。其實既然3也除不盡,也不須做到N/2,其實N/3也足夠了,也許n/4也足夠,但為什麼不是N/5或n/6? 也許應該是 SQRT(N),讓你想一想。
2013-11-08 10:49 am
Ken Ho,由 2 檢查到 sqrt(N) 已足夠,不必去到 N/2 那麼大。
2013-11-08 7:20 am
https://fbcdn-sphotos-f-a.akamaihd.net/hphotos-ak-ash4/1400196_10151954852847349_1758477285_o.jpg

一開始除以2, 不是1, 因為任何數都能整除1
當i 不能被整除, i = i + 1
直到i = n/2, 因為當i > n/2, n 一定不能整除 i, 所以之後都不用再測試
如果到 i = n/2 都不能被整除 就是質數
如果到 i = n/2 能整除任何一個<n/2 的數 都不是質數
2013-11-07 2:03 pm
N先開根號 = N^0.5
再來測


收錄日期: 2021-04-26 11:32:35
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20131106000051KK00231

檢視 Wayback Machine 備份