线性筛法 素数判断优化
判断素数: 普通的就不说了 一种更高效的做法: 结论是:大于等于5的质数一定和6的倍数相邻 令 x≥1 x ≥ 1,将大于等于 5 5的自然数表示如下: ......6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1...... . . . . . . 6 x − 1 , 6 x , 6 x + 1 , 6 x + 2 , 6 x + 3 , 6 x + 4 , 6 x + 5 , 6 ( x + 1 ) , 6 ( x + 1 ) + 1 . . . . . . 可以看到,不在6的倍数两侧,即 6x 6 x两侧的数为 6x+2,6x+3,6x+4... 6 x + 2 , 6 x + 3 , 6 x + 4 . . .由于 2(3x+1),3(2x+1),2(3x+2), 2 ( 3 x + 1 ) , 3 ( 2 x + 1 ) , 2 ( 3 x + 2 ) , 所以它们一定不是素数,再除去 6x 6 x本身,显然,素数要出现只可能出现在 6x 6 x的相邻两侧。 所以,基于以上条件,我们假如要判定的数为 n n,则 n n必定是 6x-1 6 x − 1或 6x+1 6 x + 1的形式,对于循环中 6i-1 6 i − 1, 6i 6 i, 6i+1 6 i + 1, 6i+2,6i+3,6i+4 6 i + 2 , 6