boolis_prime_4(int n) { if (n == 2) returntrue; if ((n & 1) == 0) returnfalse; for (int i = 3; i * i <= n; i += 2) { if (n % i == 0) { returnfalse; } } returntrue; }
boolis_prime_5(int n) { if (n <= 3) returntrue; elseif ((n & 1) == 0 || n % 3 == 0) returnfalse; for (int i = 5; i * i <= n; i += 6) { if (n % i == 0 || n % (i + 2) == 0) returnfalse; } returntrue; }
该算法的时间复杂度为
举一反三
聪明的你也许已经发现,前面说的偶数优化,也是用相同的原理。
我们可以根据这个规律更进一步,让分组大小为2*3*5=30:
我们只需要对7开始出现的素数进行检测即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
boolis_prime_6(int n) { if (n <= 3 || n == 5) returntrue; elseif ((n & 1) == 0 || n % 3 == 0 || n % 5 == 0) returnfalse; for (int i = 7; i * i <= n; i += 30) { if (n % (i - 7 + 7) == 0 || n % (i - 7 + 11) == 0 || n % (i - 7 + 13) == 0 || n % (i - 7 + 17) == 0 || n % (i - 7 + 19) == 0 || n % (i - 7 + 23) == 0 || n % (i - 7 + 29) == 0 || n % (i - 7 + 31) == 0) returnfalse; } returntrue; }