【发布时间】:2020-11-03 21:59:46
【问题描述】:
这个函数的时间复杂度是多少
bool prime(int n) {
if(n <= 1) {
return false;
} else if(n <= 3) {
return true;
} else if(n % 2 == 0 || n % 3 == 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)))
【问题讨论】:
-
我的印象是 O(n)?
-
但只是 for 循环最多需要 O(sqrt(n))
-
我认为丢失的界限是 O(sqrt(n)),而更严格的界限是 O(sqrt(n) * 1/6)。 不是专家,可能完全错了。
-
请问日志是从哪里来的?
-
@MarkRansom 一旦知道,就很容易证明primes.utm.edu/notes/faq/six.html ;)
标签: c++ time-complexity big-o primality-test