輸入兩個整數 a、b,輸出區間 [a, b] 內所有的質數。質數定義為大於 1 且僅能被 1 與自身整除的自然數。
#include
int main() {
int a, b, i, j;
printf("請輸入整數範圍並用空格隔開:\n");
scanf("%d %d", &a, &b);
for (i = a; i <= b; i++) {
for (j = 2; j <= i - 1; j++) {
if (i % j == 0) break; /* 找到因子,非質數 */
}
if (j >= i - 1) /* 迴圈正常結束,未找到因子 */
printf("%d ", i);
}
return 0;
}
for (i = a; i <= b; i++) {
if (i < 2) continue;
int is_prime = 1;
for (j = 2; j * j <= i; j++) {
if (i % j == 0) { is_prime = 0; break; }
}
if (is_prime) printf("%d ", i);
}
| 方法 | 時間複雜度 | 空間複雜度 | 適用場景 |
|---|---|---|---|
| 朴素試除 | O(n²) | O(1) | 教學、極小範圍 |
| 試除 √n | O(n√n) | O(1) | 單次查詢、中等範圍 |
| 埃氏篩 | O(n log log n) | O(n) | 多次查詢、大範圍 |