1.一般方法,暴力排除:
int prime[max];
void make_prime()
{
for(int i=1;i<=max;++i)
{
int flag=1;
for(int j=2;j<=sqrt(i);++j)
{
if(i%j==0) {flag=0;break;}
}
prime[i]=flag;//i是素数,则为1,否则为0;
}
}
时间复杂度:N^2
2.埃拉托斯特尼筛法:
int prime[max];
memset(prime,1,sizeof(prime));//假设全是素数
void make_prime_fast()
{
for(int i=2;i<=max;++i)
{
if(prime[i])//i是素数,筛法求素数
{
for(int k=2;k*i<=max;++k)
prime[k]=0;
}
}
}
时间复杂度:N ln(ln N)