下面是引用 翁賜維 於 2010-01-13 08:09 發表的 :
抱歉,我打錯了!!
前面的程式碼:
temp2=temp%i應改成temp2=temp1%j才對
這樣才有辦法用那個數去除以大於1小於那個數的所有整數
抱歉!!
麻煩在幫我看一下,謝謝!!
嗯,那意思就是如下了
┌────┬────┬────┬────┬────┬──
│ i │ 1 │ 2 │ 3 │ 4 │ 最大的迴圈
├────┼────┼────┼────┼────┼
│temp1│ 3 │ 4 │ 5 │ 6 │ temp1=temp1+i
├────┼────┼────┼────┼────┼
│ j │ 2~3 │ 2~4 │ 2~5 │ 2~6 │ 第二層迴圈 j=2~temp1
├────┼────┼────┼────┼────┼
│temp2│ 3%1 │4%2 │ 5%3 │ 6%4 │ 將temp1取餘數temp2=temp1%j
├────┼────┼────┼────┼────┼
大致上你要算是否為質數的的方向是OK的,
不過錯在你的判斷式,
你判斷式為
if(整除)
則跳出迴圈,
else
印出來.
因為會造成不管對錯,都會列印出來,對的會重覆出現,錯的也會出現
舉個例子,當i=3時,則temp1=5時,在j=2~5的迴圈中
5%2=1 ==>印出來
5%3=2 ==>印出來
5%4=1 ==>印出來
5%5=0 ==>跳出迴圈
因為從2 開始除,每除一次就印一次,所以會印出3個5
若i=7時,則temp1=9時,在j=2~9迴圈中
9%2=1 ==>雖然不為質數,但因為第一個是用去驗証,且又沒有整除,所以會被印出來
9%3=0 ==>跳出迴圈,第二個驗証才整除,不過除以2時,就已印出9了
因此,只要是單數,都會被印出至少一個
所以是整個判斷式有問題,不是紅色字,
給你一個方向,你可以在迴圈內用個變數去記錄,是否整除,待迴圈都除好時,在用此變數去判斷
才不會造成重覆印和印出質數來.
以上參考看看