Re: [討論] 判斷質數

看板NCCU08_Math作者 (我只是QQ糖)時間16年前 (2009/06/18 22:39), 編輯推噓4(406)
留言10則, 4人參與, 最新討論串2/2 (看更多)
我寫了個判斷質數的程式 如下 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)

06/18 22:52, , 1F
謝拉~ 另外想問一下n的平方根要怎樣設定出來?
06/18 22:52, 1F

06/18 22:55, , 2F
squa(n)?
06/18 22:55, 2F

06/18 22:58, , 3F
所以要再定義一個整數之後 等於squa(n)嗎
06/18 22:58, 3F

06/18 23:01, , 4F
不用那麼麻煩 那個還要加函式庫<math.h>才能用
06/18 23:01, 4F

06/18 23:02, , 5F
阿喜的棒棒!?
06/18 23:02, 5F

06/18 23:02, , 6F
判斷式裡面 你可以反過來寫 例如m小於n平方
06/18 23:02, 6F

06/18 23:02, , 7F
m < n*n
06/18 23:02, 7F

06/18 23:03, , 8F
是sqrt(n)
06/18 23:03, 8F

06/18 23:04, , 9F
妳的那個應該式改成m*m<n
06/18 23:04, 9F

06/18 23:07, , 10F
sqrt(n)回傳值是double 不能直接當int用
06/18 23:07, 10F
文章代碼(AID): #1AEb6_PS (NCCU08_Math)
文章代碼(AID): #1AEb6_PS (NCCU08_Math)