嵌套在循环中的两个循环的Big-O符号

时间:2018-10-23 00:19:04

标签: c++ big-o

我运行以下代码来检查素数对,直到达到一定条件为止(p * q <= n),并且我不确定对此的Big-O表示法是O(n ^ 2)还是O (NlogN):

在main.cpp中:

int main(int argc, char const *argv[]) 
{
    int n, q;
    cin >> n;

    for (int p = 0; p * (p + 2) <= n; p++)
    {
        q = p+2;
        if (isPrime(p) && isPrime(q))
            // output (p,q)
    }
    return 0;
}

bool isPrime(int n)
{
    if (n < 2)
        return false;

    for (int i = 2; i <= n / 2; i++)
    {
        if (n % i == 0)
            return false;
    }
    return true;
}

1 个答案:

答案 0 :(得分:4)

您的main for循环将缩放为sqrt(n)。虽然质数函数将针对其输入线性缩放,但输入始终大致为sqrt(n)。因此,您的总运行时间将缩放为n^.5 * (n^.5 + n^.5) = 2n。就是O(N)