关于如何快速筛选素数的问题

在浏览某位大佬学弟的博客时,看到了一种线性筛选素数的方法,觉得很有用,所以给大家分享出来。这种筛选的方法名叫做埃拉托斯特尼筛法:要得到自然数n以内的全部素数,只需要把不大于根号n的所有素数的倍数剔除,剩下的就是素数。思想:假设全部数均为素数,再通过剔除掉所有合数,剩下的数就为素数。
代码如下:

#include
using namespace std;
int a[10000];
int main()
{
    int i,j,n;
    scanf("%d",&n);
    for(i=0;i<=n;i++)
        a[i]=1;//初始化所有的数都为素数
    for(i=2;i<=sqrt(n);i++)
    {
        if(a[i]==1)
        {
            for(j=i*2;j<=n;j+=i)//这个素数所有的倍数都是合数
            {
                a[j]=0;
            }
        }
    }

    for(i=2;i<=n;i++)
    {
        if(a[i])
            printf("%d\n",i);
    }
    return 0;
}

你可能感兴趣的:(算法)