作者hsnu114444 (我只是QQ糖)
看板NCCU08_MATH
標題Re: [討論] 判斷質數
時間Thu Jun 18 22:39:56 2009
我寫了個判斷質數的程式
如下
int m , n;
n = int::Parse(textBox1->Text);
for ( m = 2 ; m < n ; m++) {
if (n%m == 0) {
MessageBox::Show(n.ToString() + "不是質數");
break;
}
else
MessageBox::Show(n.ToString() + "是質數");
}
但是
這樣結果好像變成
m會從2開始一直加1然後除n
之後可整除就跳出不是質數
不可整除就跳出是質數
要怎樣讓他一次判斷m從2~n-1然後都不能整除然後才說他是質數阿?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
以上是阿喜原文
你這樣的寫的話,就變成說,for迴圈每跑一次
就會跑出一個MessageBox,所以你應該要修改一下
上面那個if(n%m == 0)的判斷可以留下來
因為這就是說遇到m整除n的情況,他就會show一個不是質數。
然後他就會
重跑一次迴圈<<<這是重點
所以你的第一個if裡面要加一行
if(n%m == 0){
MessageBox::Show(n.toString+"不是質數");
break;
}
break的作用是讓迴圈的東西結束(swtich也會用到)
至於不整除的部分,你可以先宣一個變數表示質數狀態,假如宣告s是質數狀態
s = 0 不是質數
s = 1 是質數
然後你原本的
if(n%m == 0) 裡面加一行 s = 0
else裡面加一行 s = 1
這樣等你整個迴圈跑完後,如果你這個n真的是質數
s最後就會是1
for以外(注意!!是for外面喔)
加
if(s == 1){
MessageBox::Show(n.toString+"是質數");
}
這樣當你結束for迴圈時,就可以得到是不是質數的結果
阿喜棒棒!!
--
欸.....
我跟你說
cout << 我是 小 Q 喔!! <<endl;
屌吧?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.67.215
※ 編輯: hsnu114444 來自: 123.193.67.215 (06/18 22:41)
推 lovesnow1990:謝拉~ 另外想問一下n的平方根要怎樣設定出來? 06/18 22:52
推 jacky7987:squa(n)? 06/18 22:55
推 lovesnow1990:所以要再定義一個整數之後 等於squa(n)嗎 06/18 22:58
→ hsnu114444:不用那麼麻煩 那個還要加函式庫<math.h>才能用 06/18 23:01
推 isaac7910:阿喜的棒棒!? 06/18 23:02
→ hsnu114444:判斷式裡面 你可以反過來寫 例如m小於n平方 06/18 23:02
→ hsnu114444:m < n*n 06/18 23:02
→ hsnu114444:是sqrt(n) 06/18 23:03
→ hsnu114444:妳的那個應該式改成m*m<n 06/18 23:04
→ hsnu114444:sqrt(n)回傳值是double 不能直接當int用 06/18 23:07