作者bookticket ()
看板C_and_CPP
標題[語法] 尋找2~1000的質數 的語法討論
時間Mon Sep 14 20:59:36 2009
我在寫這個程式時
嘗試使用兩層迴圈 搭配高一數學學到的質數判別定理 來寫
(寫出來的結果可參考下面)
雖然跑出來的還算順利
但總覺得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)