[問題] 新手寫的判斷質數程式

看板C_and_CPP作者 (所有狗類的主人)時間13年前 (2011/04/09 23:55), 編輯推噓2(2031)
留言33則, 7人參與, 最新討論串1/2 (看更多)
剛自學不到一個禮拜,想了很久才寫出這個習題, 自己測試大致上是 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

04/10 00:04, , 1F
太大是指多少?
04/10 00:04, 1F

04/10 00:05, , 2F
就很大,不過 5 位數時 ok,@@
04/10 00:05, 2F

04/10 00:06, , 3F
其實是沒跑完 不是不會判斷
04/10 00:06, 3F

04/10 00:06, , 4F
只要判斷到根號x即可
04/10 00:06, 4F

04/10 00:08, , 5F
應該是9位數都一下就出來,10位數開始出問題
04/10 00:08, 5F

04/10 00:10, , 6F
那就是超過整數大小限制了@@"
04/10 00:10, 6F

04/10 00:10, , 7F
問題在哪?
04/10 00:10, 7F

04/10 00:10, , 8F
long long
04/10 00:10, 8F

04/10 00:11, , 9F
要不然用大數也可以
04/10 00:11, 9F

04/10 00:12, , 10F
那如果要判斷超大的數是否質數該怎辦?例如10^100000000000
04/10 00:12, 10F

04/10 00:12, , 11F
關鍵字:「大數運算」
04/10 00:12, 11F

04/10 00:19, , 12F
不過10^100000000000好像存不下XD
04/10 00:19, 12F

04/10 00:20, , 13F
可能吃到segment fault
04/10 00:20, 13F

04/10 00:21, , 14F
可以看看更號X以下的質數就好
04/10 00:21, 14F

04/10 00:24, , 15F
光要讀x就有問題了 如果是 10^100000000000的話
04/10 00:24, 15F

04/10 00:28, , 16F
陣列不會讓你開這麼大
04/10 00:28, 16F

04/10 00:29, , 17F
其實我覺得新手不用想這麼多,繼續往下看吧... XD
04/10 00:29, 17F

04/10 00:34, , 18F
奇怪?為什麼printf 沒有include<stdio.h>
04/10 00:34, 18F

04/10 00:35, , 19F
所以這個程式ok,@@?
04/10 00:35, 19F

04/10 00:46, , 20F
好吧 我有點神經質...
04/10 00:46, 20F

04/10 00:46, , 21F

04/10 00:46, , 22F
看你能不能拿到AC
04/10 00:46, 22F

04/10 00:54, , 23F
註冊了,AC是啥東東,@@? 我比較想看拿AC人的作法
04/10 00:54, 23F

04/10 00:57, , 24F
Accept
04/10 00:57, 24F

04/10 01:05, , 25F
首頁有說明
04/10 01:05, 25F

04/10 01:09, , 26F
我是覺得, 可以從程式架構上做改進, 不必急著想解多好
04/10 01:09, 26F

04/10 01:10, , 27F
這樣對你長遠來看比較有幫助
04/10 01:10, 27F

04/10 01:41, , 28F
新手太快就動手寫, 書中寫碼的風格都沒有臨摹到, 非常
04/10 01:41, 28F

04/10 01:41, , 29F
可惜
04/10 01:41, 29F

04/10 02:01, , 30F
用printf沒有include<stdio.h> 表示他的標頭檔是比較舊的
04/10 02:01, 30F

04/10 02:02, , 31F
會在<ios>中 include到cstdio
04/10 02:02, 31F

04/10 02:04, , 32F
所以比較新的標頭檔,想用printf還是需要cstdio囉?
04/10 02:04, 32F

04/10 02:04, , 33F
(我以為iostream就會把cstdio都包進來了...XD)
04/10 02:04, 33F
文章代碼(AID): #1De85aN0 (C_and_CPP)
文章代碼(AID): #1De85aN0 (C_and_CPP)