看板 C_and_CPP 關於我們 聯絡資訊
我在寫這個程式時 嘗試使用兩層迴圈 搭配高一數學學到的質數判別定理 來寫 (寫出來的結果可參考下面) 雖然跑出來的還算順利 但總覺得code有點繞(不知道是因為我是新手 還不習慣 還是真的我寫的不好|||) 想請教板上的版友 不知是否可以討論指教 提供更好或更直觀的寫法呢 感謝 =============================================================================== //底下是我寫的程式碼 int x; int i; for(x=2,i=2;x<=1000;x=x+1) { for (i=2;i<=sqrt(x);i=i+1) //如果i比sqrt(x)大就跳出,或者如果x除 //以i為整除也跳出 { if ((i>sqrt(x))||(x%i==0)) break; } { if(i>sqrt(x)) //此時i比sqrt(x)大的都是質數,故印出 //這些屬於質數的x printf("%d\t",x); } }
suhorng:首先 可以把 sqrt 移到外面,避免每次迴圈就呼叫兩次 sqrt 09/14 21:09
suhorng:函式重算。再來 sqrt 的傳回值是 double 吧,那麼 i 也會 09/14 21:09
suhorng:轉換成 double 去跟它比較。小心浮點數誤差。最後你其實可 09/14 21:10
suhorng:以不用判斷 if (i>sqrt( (double) x) ) break; 如果你將 09/14 21:11
suhorng:sqrt 轉(四捨五入)成int的話,因為這樣它自然會在 i > 09/14 21:12
suhorng:sqrt(x) 時跳出迴圈,就不用 break 了。 09/14 21:12
阿 感謝 XD 我懂了 感謝 ※ 編輯: bookticket 來自: 140.119.143.103 (09/14 21:28)