對整數 m (2 ≤ m ≤ 100),檢查是否存在除數 d (2 ≤ d ≤ √m)。無除數則為質數。
優化:d 只需檢查到 √m(或 m/2 粗略上界),甚至可先排除偶數。
#include
void main() {
int i = 2, j, n, m;
while (i < 101) {
m = 1; n = i / 2; j = 2;
while (j <= n) {
if (i % j == 0) { m = 0; break; }
j++;
}
if (m) cout << i << " ";
i++;
}
}
#include
void main() {
int i = 2, j, n, m;
do {
m = 1; n = i / 2; j = 2;
do {
if (i % j == 0) { m = 0; break; }
j++;
} while (j <= n);
if (m) cout << i << " ";
i++;
} while (i < 101);
}
#include
void main() {
int i, j, n, m;
for (i = 2; i < 101; i++) {
m = 1; n = i / 2;
for (j = 2; j <= n; j++) {
if (i % j == 0) { m = 0; break; }
}
if (m) cout << i << " ";
}
}
sqrt 與偶數排除)#include
#include
void main() {
for (int i = 2; i < 101; i++) {
int flag = 1;
for (int j = 2; j <= sqrt(i); j++) {
if (i % j == 0) { flag = 0; break; }
}
if (flag) cout << i << endl;
}
}
// 排除偶數(2 以外)
if (m % 2 != 0) {
int k = (int)sqrt(m);
for (int n = 3; n <= k; n += 2) // 步長 2,僅檢查奇數
if (m % n == 0) break;
if (n > k) { /* 是質數 */ }
}
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
break 提前終止內層迴圈,避免多餘計算。sqrt 減少測試除數數量,顯著提升效能。m/flag 記錄「是否為質數」狀態。