首页 > 其他 > 详细

素数筛(埃氏筛+欧拉筛)

时间:2019-08-20 22:08:44      阅读:86      评论:0      收藏:0      [点我收藏+]

素数筛

顾名思义,用来筛选素数。

这里介绍两种素数筛:

1.埃氏筛(埃拉托斯特尼筛法)

 1 void ass()
 2 {
 3     memset(u,true,sizeof(u));//u[i]=true表示i是素数
 4     for(int i=2; i<=1100000; i++)
 5     {
 6         if(u[i])
 7             for(int j=2; j<=1100000; j++)
 8             {
 9                 if(i*j>1100000)    break;
10                 u[i*j]=false;//素数×j(j>=2)一定是合数
11             }
12     }
13 }

 

2.欧拉筛

 1 void olas()//su[]用来存素数的值
 2 {
 3     int i,j;
 4     num=1;//num记录素数个数
 5     memset(u,true,sizeof(u));//u[i]=true表示i是素数
 6     for(int i=2;i<=1000000;i++)
 7     {
 8         if(u[i])    su[num++]=i;
 9         for(int j=1;j<num;j++)
10         {
11             if(i*su[j]>1000000)    break;//超出判定的范围
12             u[i*su[j]]=false;//因为素数×i(i>=2)一定是合数。
13             if(i%su[j]==0)    break;//这个是欧拉筛减少时间开销的关        
14      }
15 } 16 }

 

素数筛(埃氏筛+欧拉筛)

原文:https://www.cnblogs.com/cautx/p/11385468.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!