m <= (int)sqrt(i)
double 類型
判斷素數只需檢查到 √n 即可
bool isPrime(int n) {
if (n <= 1) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
int limit = (int)sqrt(n); // 計算一次,避免循環中重複調用
for (int i = 3; i <= limit; i += 2) { // 只檢查奇數
if (n % i == 0) return false;
}
return true;
}
| 誤區 | 正確理解 |
|---|---|
| (int)sqrt(i) 是四捨五入 | 是截斷/向零取整,2.9 → 2 |
| sqrt 需要 #include <math.h> | C++ 需 |
| float 精度足夠 | 大數建議用 double,避免精度損失導致邊界錯誤 |
(int)sqrt(i) 將浮點平方根截斷為整數,作為循環上界,實現素數判斷從 O(n) 到 O(√n) 的數學優化。這是利用數學性質減少計算量的經典案例。