素数的定义
首先重新温习一下
只能被1和自身整除的数就是素数,也称作质数。
注意1既不是素数也不是合数,2是最小的素数
既然有了定义,就可以在定义出发理解一下筛选法的原理。
埃氏筛选法
埃拉托色尼筛选法 (the Sieve of Eratosthenes)
对埃氏筛选法原理的理解(以2-20为例):
1、首先1不是素数也不是合数,直接筛掉,2是最小的素数,因此从2开始。
此时剩余2-20的所有整数,素数组:2
2、的所有倍数均违背素数的概念,即除1和本身之外还可以被2整除,因此被筛掉
剩余:2,3,5,7,9,11,13,15,17,19
素数组:2,3
3、此时3是次小的素数,3的倍数均违背定义,再次被筛掉
剩余:2,3,5,7,11,13,17,19
素数组:2,3,5
4、此时在给定区间内所有的数都不能互相整除,结束循环
剩余:2,3,5,7,11,13,17,19
素数组:2,3,5,7,11,13,17,19
经历数轮筛选,直到给定数组剩余的最后一个结束,最后经历多轮筛选剩下的就是给定区间内的所有素数
关键代码如下
//筛选过程
for(int i = 2; i <= n; i++)
{
if(is_prime[i]) //is_prime是bool类型,用来标记i是否是素数,默认为true
{
prime[p++] = i; //将确定为素数的数存入素数数组
for(int j = 2*i; j<=n; j++)。
is_prime[j] = false; //此时被筛掉的数的标记更改为false,即不是素数
}
}