for (m = 101; m <= 200; m++) {
k = sqrt(m);
for (i = 2; i <= k; i++)
if (m % i == 0) break;
if (i > k) printf("%d ", m);
}
若一個數 `m` 有因數 `d` 且 `d > sqrt(m)`,則其配對因數 `m/d` 必然 `< sqrt(m)`。因此只需檢查到 `sqrt(m)` 即可覆蓋所有可能因數,減少一半以上循環次數。
`m = 36`,`sqrt(36) = 6`。只需試除 2~6:
2✓, 3✓, 4✓, 5✗, 6✓ → 發現因數,非素數。
無需試 9, 12, 18,因其配對因數 4, 3, 2 已在 2~6 中檢查過。