提问者:小点点

这种素性检验函数的时间复杂度


这个函数的时间复杂度是多少

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)))

共1个答案

匿名用户

每个if都是常数时间。

for循环一直执行到i*i达到n,这意味着它被执行sqrt(n)/6次。 所以复杂度是O(sqrt(n))

它并不表示素数的密度与1/log(n)成正比(可能这就是解决方案中log(n)的来源。