跳转至

数学-素数判定

bool isPrime(int n)
{
    if (n <= 1) return false;
    if (n == 2) return true;
    if (!(n & 1)) return false; // !(n & 1) <==> n % 2 == 0
    int limit = sqrt(n) + 1;
    for (int i = 3; i <= limit; i += 2) {
        if (n % i == 0) return false;
    }

    return true;
}

时间复杂度为O(\sqrt{n})。因为: $$ n = d1 \times d2 $$ d_1或d_2中的一个取最大值是\sqrt{n},如果有一个大于此数,就必有一个小于此数的因子,所以只需要检查到\sqrt{n}即可。