代码改变世界

素数的线性筛法

2009-03-09 19:31  Logic0  阅读(146)  评论(0编辑  收藏  举报
我顶 字号:

算法摘录一:

for (i=2;i<=n;i++)
{
   if (a[i]==0)
   {
      num++;p[num]=i;
   }
   for (j=1;((j<=num) && (i*p[j]<=n)); j++)
   {
      a[i*p[j]] = 1 ;
       if (i%p[j] == 0) break;
   }
}

算法摘录二:

int num;        //num为素数的个数,a[i]为第i个数是否为素数,p[i]为第i+1个素数

void prime()
{
    long long i, j ;
    num=0;
    for(i=2; i<N; i++)
    {
        if(a[i]==0)
        {
            p[num]=i;
            num++;
            for(j=i; j<N/i; j++)
            {
                a[i*j]=1;
            }
        } 
    }
}