1. 程式人生 > >求小於等於n的質數個數

求小於等於n的質數個數

埃氏篩法(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; } }