質數 |
尚未結案
|
white-whale
一般會員 發表:5 回覆:5 積分:2 註冊:2004-10-24 發送簡訊給我 |
#include "stdafx.h" #include○第一次執行時可以,可是後來稍微做些改變執行結果看不到,執行完後視窗會自己關掉不會停下來..即使我打ㄌ system("PAUSE") ○輸入某數判斷他是否為質數,直到輸入負數才跳出程式。故我用whiel(1)可以重複輸入 |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
white-whale 您好: 您的質數判斷只能是小於等於89。
依您的邏輯修改程式如下,請參考。
int main(int argc, char* argv[]) { int c; int x[24]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,57,61,67,71,73,79,83,87,89}; while(1) { cout << "輸入一數值\n"; cin >> c; if (c<0) { break; //若輸入ㄉ數為負數則跳出 } int found = 0; for(int i=0;i<=24;i ) { if (c==x[i]) { cout << "是質數" <<"\n"; found = 1; break; } } if ( found==0 ) { cout << "不是質數\n"; } } system("PAUSE"); return 0; }RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
white-whale
一般會員 發表:5 回覆:5 積分:2 註冊:2004-10-24 發送簡訊給我 |
|
pkdemon
初階會員 發表:2 回覆:51 積分:25 註冊:2004-09-13 發送簡訊給我 |
white-whale你好, 請參考http://delphi.ktop.com.tw/topic.php?topic_id=53591 另外要提的是,利用sqrt來求質數是一個方法,可是這也有牽扯到效率的問題畢竟一個很大的數即使開根號也是很大 這方面的話要利用數學方面的方法來輔助,小弟不才,數學很就沒有碰了.....請各位知道的大大來 > 另外改了一下你的程式,試試看吧 < class="code">
#include "stdafx.h"
#include
|
white-whale
一般會員 發表:5 回覆:5 積分:2 註冊:2004-10-24 發送簡訊給我 |
|
pkdemon
初階會員 發表:2 回覆:51 積分:25 註冊:2004-09-13 發送簡訊給我 |
|
white-whale
一般會員 發表:5 回覆:5 積分:2 註冊:2004-10-24 發送簡訊給我 |
|
pkdemon
初階會員 發表:2 回覆:51 積分:25 註冊:2004-09-13 發送簡訊給我 |
|
white-whale
一般會員 發表:5 回覆:5 積分:2 註冊:2004-10-24 發送簡訊給我 |
int _tmain(int argc, _TCHAR* argv[]) { bool ret; int c; int p; while(1) { cout << "輸入一數值\n"; cin >> c; if (c < 0) { break; //若輸入ㄉ數為負數則跳出 } p = sqrt(c); //sqrt是開根號為什麼要降設ㄋ for( int i = 2 ; i <= p ; i ).....?? { if (c%i == 0)...?? { ret = true; break; } else { ret = false; } } if(ret) //這行不可以寫成if(ret==true)嗎? { cout << "不是質數" <<"\n"; } else { cout << "是質數" << "\n"; } } system("PAUSE"); return 0; }請你解釋一下..謝謝~ 若輸入16,那p=4,迴圈為什麼要用i~p→2~4,而且若C=10,p就會是3.xxx,可是P是宣告int整數值ㄝ,降不是就不符合ㄌ嗎。 用sqrt是不是只要讓他判斷一次就好,用雙回圈就判斷2次...是這樣嗎@@" |
pkdemon
初階會員 發表:2 回覆:51 積分:25 註冊:2004-09-13 發送簡訊給我 |
引言:剩下的算是數學問題,我這邊用來判斷一個數是不是質數的方法,是利用一個數N的平方根以下所有的整數都無法整除N(1除外),則N為質數 P宣告為整數是因為取平方根的時候只要整數部分(其實用float也是可以^^a) 了解判斷質數的方法,就可以知道程式為什麼長這樣了,方法並不唯一,這只是其中一個方法^^int _tmain(int argc, _TCHAR* argv[]) { bool ret; int c; int p; while(1) { cout << "輸入一數值\n"; cin >> c; if (c < 0) { break; //若輸入ㄉ數為負數則跳出 } p = sqrt(c); //sqrt是開根號為什麼要降設ㄋ for( int i = 2 ; i <= p ; i ).....?? { if (c%i == 0)...?? { ret = true; break; } else { ret = false; } } if(ret) //這行不可以寫成if(ret==true)嗎?可以只是懶^^a { cout << "不是質數" <<"\n"; } else { cout << "是質數" << "\n"; } } system("PAUSE"); return 0; }請你解釋一下..謝謝~ 若輸入16,那p=4,迴圈為什麼要用i~p→2~4,而且若C=10,p就會是3.xxx,可是P是宣告int整數值ㄝ,降不是就不符合ㄌ嗎。 用sqrt是不是只要讓他判斷一次就好,用雙回圈就判斷2次...是這樣嗎@@" |
shpeng
初階會員 發表:6 回覆:67 積分:49 註冊:2002-12-21 發送簡訊給我 |
|
bdedownload
一般會員 發表:7 回覆:10 積分:3 註冊:2003-05-14 發送簡訊給我 |
|
white-whale
一般會員 發表:5 回覆:5 積分:2 註冊:2004-10-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |