我运行以下代码来检查素数对,直到达到一定条件为止(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;
}
答案 0 :(得分:4)
您的main for循环将缩放为sqrt(n)
。虽然质数函数将针对其输入线性缩放,但输入始终大致为sqrt(n)
。因此,您的总运行时间将缩放为n^.5 * (n^.5 + n^.5) = 2n
。就是O(N)
。