我原來的功能,以確定是否一個數主要是:檢查黃金大O
bool is_prime(int x) {
for (int y = 2; y < x; ++y) {
if (x % y == 0) {
return false;
}
}
return true;
}
這跑了的O(x)
複雜,因爲你可能不得不去x
。
我已經學會了一些優化,需要檢查我的big-o。下面是改進方案:
bool is_prime(int x)
{
if (x % 2 == 0 && x > 2) {
return false;
}
for (int y = 3; y*y <= x; y += 2) {
if (x % y == 0) {
return false;
}
}
return true;
}
的,這對我現在馬上要到sqrt()
更改爲O(sqrt(x))
?
@MattTimmermans同意你和AndyG的建議。我用'x'編寫函數,所以它應該是'x'而不是'n'。 – datta
另一個優化是預先計算'x'的整數平方根(即找到一個整數'm',這樣'm * m'在正數'x'的'x-1'和'x'之間) 。有效的算法(複雜性O(log(x))或更好)用於計算整數平方根,而不訴諸於浮點。 – Peter
@Peter我原本沒有進行浮點數轉換,但數學表明'm * m'在這裏可以達到目的。 – datta