引用 | 編輯
0937711311
2007-05-30 22:23 |
樓主
▼ |
||
x0
若N是質數,且N+2也是質數,則稱為【雙生質數】。請寫一C程式,輸入a b兩數字,輸出a、b之間的雙生質數,直到輸入-1為止。 每組雙生質數,以tab隔開。 範圍內的雙生質數,彼此換行列印。 若該範圍無雙生質數,則輸出"此範圍內無雙生質數"。 不同範圍內的結果,以10個"="符號隔開。 請注意! a大於等於2,且a不一定小於b。 輸入範例: 2 50 100 80 -1 輸出範例: 3 5 5 7 11 13 17 19 29 31 41 43 ========== 此範圍內無雙生質數 ========== x0
|
引用 | 編輯
ety
2007-06-01 14:13 |
1樓
▲ ▼ |
複製程式
#include <stdio.h> #include <math.h> int prime(int input) { int x; int result; int loop; x = (int)sqrt((double)input); result = 1; for (loop = 3; loop <= x; loop += 2) { if (input % loop == 0) {result = 0;} } if (result == 1) {return 1;} else {return 0;} } int main(void) { int a; int b; int loop; int result; while (scanf("%d", &a) == 1) { if (a == -1) {return 0;} else {scanf("%d", &b);} if (a < 2) { printf("==========\n請注意! a大於等於2,且a不一定小於b。\n==========\n"); return 0; } if (a > b) { a = a + b; b = a - b; a = a - b; } result = 1; while (!(a & 1)) {a = a + 1;} for (loop = a; loop < b; loop += 2) { if (prime(loop)) { if (prime(loop + 2)) { printf("%d\t%d\n", loop, loop + 2); result = 0; } } } if (result) {printf("==========\n此範圍內無雙生質數\n==========\n");} } return 0; } x0 |
引用 | 編輯
0937711311
2007-06-01 22:10 |
2樓
▲ ▼ |
真是太感謝~大大~~~~~了~感動~我去試試看
x0 |
引用 | 編輯
0937711311
2007-06-03 21:37 |
4樓
▲ ▼ |
可以幫我加上註解嗎
x0 |
引用 | 編輯
0937711311
2007-06-03 22:15 |
6樓
▲ ▼ |
loopg是變數嗎
x0 |
引用 | 編輯
ety
2007-06-03 22:51 |
8樓
▲ ▼ |
花了點時間改寫並且加了註解, 若還是連看都看不懂, 我認為你該被當。
我直接給你答案, 老實說這跟作弊沒兩樣了。 複製程式 #include <stdio.h> #include <math.h> // 因為有用到 sqrt(),所以才宣告。 int p(int i) // 此為判斷是否為質數之副程式,若輸入值為質數便回傳 1,否則回傳 0。 { int x = (int)sqrt((double)i), r = 1, l; // 對'輸入質i'開根號,然後儲存於'變數x'。 for (l = 3; l <= x; l += 2) {if (i % l == 0) r = 0;} return r; } int q(int a, int b) // a 是'輸入值a',b 是'輸入值b'。 { int r = 1, l; // r 是運算結果,若輸入值ab區間有雙生質數便設為 0 ,否則為 1 ,l 是’迴圈計數變數’。 if (!(a & 1)) a += 1; // 以及閘來作邏輯判斷,若'輸入值a'是偶數就加 1 ,使其變為奇數。 for (l = a; l < b; l += 2) // 單純只考慮奇數(因為除了 2 不可能有質數同時為偶數的情況),故迴圈每次不只加 1 而是加 2。 { if (p(l)) // 呼叫'副程式p'來判斷’迴圈計數變數’是否為質數。 { if (p(l + 2)) // 若’迴圈計數變數’是質數便再呼叫'副程式p'來判斷’迴圈計數變數’ + 2 是否也為質數。 { printf("%d\t%d\n", l, l + 2); // 輸出雙生質數。 r = 0; } } } r ? printf("此範圍內無雙生質數\n==========\n") : printf("==========\n"); // 若輸入值ab區間無雙生質數便輸出'此範圍內無雙生質數=========='的訊息,否則只輸出'=========='的訊息。 } int main(void) { int a, b, l; // a 是'輸入值a',b 是'輸入值b',l 是迴圈計數變數。 while (scanf("%d", &a) == 1) // 讀取鍵盤輸入的數值並儲存為'輸入值a'。 { if (a == -1) return 0; // 若'輸入值a'是 -1 便結束此程式。 scanf("%d", &b); // 讀取鍵盤輸入的數值並儲存為'輸入值b'。 a < 2 ? printf("請注意! a一定要大於或等於2。\n==========") : a < b ? q(a, b) : q(b, a); // 若'輸入值a'小於 2 便輸出錯誤訊息,否則就將'輸入值a'與'輸入值b'交由'副程式q'來處理。 } return 0; } x1 |