3329. [GESP202309 五级 C++] 第 11 题

[GESP202309 五级 C++] 第 11 题

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

#include <iostream>
#include <cmath>
using namespace std;

bool isPrimeA(int N) {
    if (N < 2)
        return false;
    for (int i = 2; i < N; i++)
        if (N % i == 0)
            return false;
    return true;
}
bool isPrimeB(int N) {
    if (N < 2)
        return false;
    int endNum = int(sqrt(N));
    for (int i = 2; i <= endNum; i++)
        if (N % i == 0)
            return false;
    return true;
}
int main() {
    cout << boolalpha;
    cout << isPrimeA(13) << " " << isPrimeB(13) << endl;
    return 0;
}

{{ select(1) }}

  • isPrimeA() 的最坏时间复杂度是 O(N)O(N),isPrimeB() 的最坏时间复杂度是 O(log⁡N)O(\log N),isPrimeB() 优于 isPrimeA()。
  • isPrimeA() 的最坏时间复杂度是 O(N)O(N),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()。