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