求小於等於n的質數個數
阿新 • • 發佈:2018-12-27
埃氏篩法(Eratosthenes篩選法)
演算法基本思想:要得到自然數n以內的全部素數,必須把不大於n1/2的所有素數的倍數剔除,剩下的就是素數。
給出要篩數值的範圍n,找出n以內的素數。先用2去篩,即把2留下,把2的倍數剔除掉;再用2的下一個沒被篩掉的數,也就是3篩,把3留下,把3的倍數剔除掉;接下去用下一個質數5篩,把5留下,把5的倍數剔除掉;不斷重複下去……。
bool a[1000003];//記錄i是否被剔除
int main()
{
int n;
while(cin>>n)
{
memset(a, 0, (sizeof(bool))*1000003);
for (int i=2;i<=sqrt(n);i++)//可能的因數
{
if(a[i]==1) continue;
for(int j=2;j*i<=n;j++)
{
a[j*i]=1;
}
}
int ans=0;
for(int i=2;i<=n;i++)
{
if(a[i]!=1)
ans++;
}
cout <<ans<<endl;
}
}