原因:
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;
}