看板 C_and_CPP 關於我們 聯絡資訊
剛自學不到一個禮拜,想了很久才寫出這個習題, 自己測試大致上是 OK,不過還是想請教大家幾個問題。 程式如下: #include <iostream> #include <math.h> using namespace std; int main() { int x,y; printf("質數判別小程式\n\n"); printf("請輸入一個正整數:"); scanf("%d",&x); if(x==1) { cout<<"1 不是質數"<<endl; } if(x==2) { cout<<"2 是質數"<<endl; } for(y=2;y<x;y++) { if(x%y==0) { cout<<x<<"非質數"<<endl; break; } if(x%y!=0&&(y+1)==x) cout<<x<<"乃質數"<<endl; } system("pause"); } 想請問大家這樣寫 OK 嗎? (有沒有甚麼地方多餘或是有邏輯盲點的?) 自己測試好像OK,不過輸入的數字太大就不會判斷是否質數了,why,@@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.229.246.181
TsinTa:太大是指多少? 04/10 00:04
kyoiku:就很大,不過 5 位數時 ok,@@ 04/10 00:05
firejox:其實是沒跑完 不是不會判斷 04/10 00:06
firejox:只要判斷到根號x即可 04/10 00:06
kyoiku:應該是9位數都一下就出來,10位數開始出問題 04/10 00:08
TsinTa:那就是超過整數大小限制了@@" 04/10 00:10
firejox:問題在哪? 04/10 00:10
firejox:long long 04/10 00:10
firejox:要不然用大數也可以 04/10 00:11
kyoiku:那如果要判斷超大的數是否質數該怎辦?例如10^100000000000 04/10 00:12
james732:關鍵字:「大數運算」 04/10 00:12
firejox:不過10^100000000000好像存不下XD 04/10 00:19
firejox:可能吃到segment fault 04/10 00:20
tomozard:可以看看更號X以下的質數就好 04/10 00:21
firejox:光要讀x就有問題了 如果是 10^100000000000的話 04/10 00:24
firejox:陣列不會讓你開這麼大 04/10 00:28
james732:其實我覺得新手不用想這麼多,繼續往下看吧... XD 04/10 00:29
firejox:奇怪?為什麼printf 沒有include<stdio.h> 04/10 00:34
kyoiku:所以這個程式ok,@@? 04/10 00:35
firejox:好吧 我有點神經質... 04/10 00:46
firejox:你可以去http://zerojudge.tw/ShowProblem?problemid=a007 04/10 00:46
firejox:看你能不能拿到AC 04/10 00:46
kyoiku:註冊了,AC是啥東東,@@? 我比較想看拿AC人的作法 04/10 00:54
firejox:Accept 04/10 00:57
firejox:首頁有說明 04/10 01:05
loveme00835:我是覺得, 可以從程式架構上做改進, 不必急著想解多好 04/10 01:09
loveme00835:這樣對你長遠來看比較有幫助 04/10 01:10
loveme00835:新手太快就動手寫, 書中寫碼的風格都沒有臨摹到, 非常 04/10 01:41
loveme00835:可惜 04/10 01:41
Donze:用printf沒有include<stdio.h> 表示他的標頭檔是比較舊的 04/10 02:01
Donze:會在<ios>中 include到cstdio 04/10 02:02
james732:所以比較新的標頭檔,想用printf還是需要cstdio囉? 04/10 02:04
james732:(我以為iostream就會把cstdio都包進來了...XD) 04/10 02:04