3351. [GESP202312 五级 C++] 第 8 题

[GESP202312 五级 C++] 第 8 题

下面C++代码中的 isPrimeA() 和 isPrimeB() 都用于判断参数N是否素数,有关其时间复杂度的正确说法是( )。

bool isPrimeA(int N)
{
    if (N < 2)
        return false;
    for (int i = 2; i <= N / 2 ; i++)
        if (N % i == 0)
            return false;
    return true;
}
bool isPrimeB(int N)
{
    if (N < 2)
        return false;
    for (int i = 2; i <= sqrt(N); i++)
        if (N % i == 0)
            return false;
    return true;
}

{{ select(1) }}

  • isPrimeA() 的最坏时间复杂度是 O(N2)O(\frac{N}{2}),isPrimeB() 的最坏时间复杂度是 O(log⁡N)O(\log N),isPrimeA() 优于 isPrimeB()
  • isPrimeA() 的最坏时间复杂度是 O(N2)O(\frac{N}{2}),isPrimeB() 的最坏时间复杂度是 O(N12)O(N^{\frac{1}{2}}),isPrimeB() 绝大多数情况下优于 isPrimeA()
  • isPrimeA() 的最坏时间复杂度是 O(N12)O(N^{\frac{1}{2}}),isPrimeB() 的最坏时间复杂度是 O(N)O(N),isPrimeA() 优于 isPrimeB()
  • isPrimeA() 的最坏时间复杂度是 O(log⁡N)O(\log N),isPrimeB() 的最坏时间复杂度是 O(N)O(N),isPrimeA() 优于 isPrimeB()