一般筛选素数是判断这个数是否存在除了1和本身外的其他约数,但是对于大数的时候就不适合使用了。
筛选素数的过程:质数的倍数的都需要被除去
const int V=10000;
int a[V],prime[V],j=0;
// j记录的是素数的个数
void get_prime()
{
//a[i]为0则i为素数
memset(a,0,sizeof(a));
for(int i=2; i*i < V; i++ )
{
if(!a[i]) // 如果a[i]为0的话
{
prime[j++]=i; // 将所有的素数放在prime数组中
for(int k=i*i; k < V; k+=i)
a[k]=1; // 剔除(筛选)素数的倍数
}
}
}
for(int k=i*i; k < V; k+=i)
a[k]=1; // 剔除(筛选)素数的倍数
为什么从k=i*i开始呢?
比如 i = 5; k=25开始;之前的 10(2*5) 15(3*5) 20(2*10)已经被剔除了
所以不必再次剔除了