检查数字是否为素数的算法

Nix*_*xoN 2 c++ algorithm primes

大家好!

我来到这个算法是关于如何检查数字是否为素数,可能对我来说很好,但我想知道它是否可以改进

bool isPrime(int num)
{
    bool isPrime = 1;
    if (num <= 0)
    {
        return 0;
    }
    if (num == 1)
    {
        return 0;
    }
    for (int i = 2; i <= sqrt(num); ++i)
    {
        if (num % i == 0)
        {
            isPrime = 0;
        }
    }

    return isPrime;
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

小智 5

通过观察除 2 和 3 之外的所有素数都是 6k ± 1 的形式,可以进一步改进算法。这是因为对于某些整数 k 和对于 i = -,所有整数都可以表示为 (6k + i) 1、0、1、2、3 或 4;2 除 (6k + 0)、(6k + 2)、(6k + 4);和 3 个除法 (6k + 3)。所以更有效的方法是测试 n 是否可以被 2 或 3 整除,然后检查所有形式为 6k ± 1 的数字

上面的实现:

#include <iostream>

bool isPrime(int n) {
    // Corner cases
    if(n <= 1) return false;
    if(n <= 3) return true;

    // This is checked so that we can skip
    // middle five numbers in below loop
    if(n % 2 == 0 || n % 3 == 0) return false;

    for(int i = 5; i * i <= n; i = i + 6)
        if(n % i == 0 || n % (i + 2) == 0) return false;

    return true;
}

// Driver Program to test above function
int main() {
    std::cout << std::boolalpha
        << isPrime(11) << '\n'
        << isPrime(15) << '\n';
}

Run Code Online (Sandbox Code Playgroud)