#include <iostream>
#include <string.h>
using namespace std;
int flag[1000000];
void Simple(int n)
{
int cnt=0;
for(int i=2;i<=n;i++)
{
if(flag[i]==0)
{
for(int j=2;i*j<=n;j++)
{
flag[i*j]=1;
}
}
}
for(int i=2;i<=n;i++)
if(flag[i]==0)
{
cout<<i<<" ";
cnt++;
}
cout<<endl<<cnt<<endl;
}
void Advance(int n)
{
int cnt=0;
int end;
end=sqrtf(n)+1;
for(int i=2;i<=end;i++)//这里原本是i<=n,结果如果输入的n在47000左右就不行了
{ //exe会停止工作,因为下面有平方运算,n^2太大int类型装不下
if(flag[i]==0)
{
int t=0;
for(int j=1;i*j<=n;j++)
{
for(int p=i*j;p<=n;p*=i)
{
flag[p]=1;
}
}
flag[i]=0;
}
}
for(int i=2;i<=n;i++)
if(flag[i]==0)
{
cout<<i<<" ";
cnt++;
}
cout<<endl<<cnt<<endl;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(flag,0,sizeof(flag));
Simple(n);//未优化版本的素数筛法
memset(flag,0,sizeof(flag));
Advance(n);//优化过的素数筛法
}
return 0;
}
素数筛法
最新推荐文章于 2022-03-27 18:13:55 发布