找出 101 到 200 之間所有質數,輸出每個質數並統計總個數。
對每個候選數 i,設 flag=1,嘗試除以 2 ~ i/2,若整除則 flag=0。迴圈結束後 flag==1 即為質數。
#include <stdio.h>
#include <math.h>
int main()
{
int primes[50], count = 0;
for (int i = 101; i <= 200; i++) {
int isPrime = 1;
for (int j = 2; j*j <= i; j++) { // √i 優化
if (i % j == 0) { isPrime = 0; break; }
}
if (isPrime) primes[count++] = i;
}
printf("101~200 共有 %d 個質數:\n", count);
for (int i = 0; i < count; i++) {
printf("%d%s", primes[i], (i+1)%10==0 ? "\n" : " ");
}
printf("\n");
return 0;
}
101~200 共有 21 個質數:
101 103 107 109 113 127 131 137 139 149
151 157 163 167 173 179 181 191 193 197
199
j*j <= i 替代 j <= i/2,速度提升 ~√n 倍break 提早跳出,發現因子即停止<=200 含邊界質數定理:π(x) ~ x/ln(x)。
π(200) - π(100) ≈ 200/5.3 - 100/4.6 ≈ 37.7 - 21.7 = 16,實際 21 個,近似值尚可。