欧拉筛法优化(判断素数)

 原因:

6的倍数以外的数是什么?

6的倍数就是6k,6k附近的数,

6k-3,        6k-2,        6k-1,       6k,        6k+1,        6k+2,       6k+3,

那么不在6k左右的几个数是

6k-3,6k-2,6k+2,6k+3,

第一个和最后一个数是可以整除3,

另两个数是可以整除2的,所以他们肯定不是素数。

所以只有6的倍数附近的两个数才有可能是质数。
 

boolean isPrime(int num) {
    if (num <= 3) {
        return num > 1;
    }
    // 不在6的倍数两侧的一定不是质数
    if (num % 6 != 1 && num % 6 != 5) {
        return false;
    }
    int sqrt = (int) Math.sqrt(num);
    for (int i = 5; i <= sqrt; i += 6) {
        if (num % i == 0 || num % (i + 2) == 0) {
            return false;
        }
    }
    return true;
}

你可能感兴趣的:(#,数学,算法,开发语言)