这个函数的时间复杂度是多少
bool prime(int n) {
if(n <= 1) {
return false;
} else if(n <= 3) {
return true;
} else if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0 || n % 7 == 0 || n % 11 == 0) {
return false;
} else {
for(int i = 5; i * i <= n; i += 6) {
if(n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
}
return true;
}
如果非要我猜的话,那就是
O(sqrt(log(n)))
每个if都是常数时间。
for
循环一直执行到i*i
达到n
,这意味着它被执行sqrt(n)/6
次。 所以复杂度是O(sqrt(n))
。
它并不表示素数的密度与1/log(n)
成正比(可能这就是解决方案中log(n)
的来源。