今天一个大四学长给我们讲了一下素数筛选法,我觉得学长老逗了,现在言归正传,说一下素数筛选;
素数筛选:
刚开始我们的程序
第一个代码:
int sushu(int m)
{
if(m==1)return 0;
for(int i=2;i*i<=m;i++)
{
if(m%i==0)return 0;
}
return 1;
}
但是现在呢,我们要进行优化;
第二个代码:
void sushu()
{
memset(data,1,sizeof(data));
for(int i=2;i<maxn;i++)
{
if(data[i])
for(long long j=i+i;j<maxn;j+=i)
data[j]=0;
}
for(int i=2;i<maxn;i++)
if(data[i])
cout<<i<<" ";
cout<<endl;
}
这个代码还是慢,现在进行最终代码就要闪亮登场了;
终极代码:
void sushu()
{
memset(data,1,sizeof(data));
for(int i=2;i<maxn;i++)
{
if(data[i])
for(long long j=(long long)i*i;j<maxn;j+=i)
data[j]=0;
}
for(int i=2;i<maxn;i++)
if(data[i])
cout<<i<<" ";
cout<<endl;
}