今天在看Clean Code第四章:注释的时候接触到了一个求素数序列的算法,有点意思,打算深入研究下。
1.先说说埃拉托色尼筛选法
给一个整数N,筛选出所有不大于N的素数
1 2 3 4 5 6 7 8 9 10 ...... N
(1)去除1 因为1 既不是合数也不是素数
2 3 4 5 6 7 8 9 10 ...... N
(2) 去除2的倍数
3 5 7 9 .......N
(3) 去除3的倍数
5 7 ..... N
(4) 去除5.....
........
一直到N 留下的就是素数
伪代码 如下
boolean isPrime[N+1] = false;
isPrime[2] = true;
for(int i = 2; i <= N; i++){
if(isPrime = true){
for( j = i * i; j <= N; j+=i ){
isPrime [ j ] = false;
}
}
}
for(int i = 1 ; i <= N; i++){
if(isPrime)
printf(i + " ");
}