为 Java 中的程序计算 Big-O

Compute Big-O for a program in Java

我只想问一下这个程序的Big-O是什么。我认为是 n/2,但我不确定。

public static boolean isPrime(int k) {
    if (k <= 1)
        return false;
    else if (k > 2 && k%2 == 0)
        return false;
    else 
    {
        for(int i = 3;i<=k/2;i+=2)
            if (k % i == 0)
                return false;
    }
    return true;
}

复杂度为O(k),即线性时间

采取最坏情况执行,其中 k素数。然后你的算法将执行所有行,直到 return true;.

特别是你完全执行了 for 循环,它产生了 (k / 4) - 3 次迭代:

for (int i = 3; i <= k/2; i += 2)

所以你得到 O((k / 4) - 3)O(k).