六倍素数法:
对于大于等于5的数我们可以用6的倍数表示,
6n-1 6n 6n+1 6n+2 6n+3 6n+4
5 -----6 – 7 ---- -8 ----- 9 ----- 10
11 —12 -13 ----14 — 15 ---- 16
17 —18 -19 ---- 20 ----21 ……
6的真因数有1, 2, 3
6n 可以被2 或者3整除
6n+2, 6n+4 可以被2整除
6n+3 可以被3整除
我们先排除能被2, 3整除的数,我们6个数只需要判断
6n-1和6n+1两个数,极大提高了效率。
int isPrime(int n)
{
if (n <= 1)
return 0;
if (n == 2 || n == 3 || n == 5)
return 1;
if (n % 2 == 0 || n % 3 == 0)
return 0;
for (int i = 6; i <= sqrt(n); i += 6)
if (n % (i - 1) == 0 || n % (i + 1) == 0)
return 0;
return 1;
}