[模板]素数筛选
2015-06-07 18:08
603 查看
这套素数模板包含两个内容:
1、使用notprime[]数组构成一张布尔类型的表,用O(1)的时间复杂度判断一个数是不是素数。
2、素数筛选,筛选出小于MAXN的素数。 prime[0] 存的是素数的个数。
两种素数判断法,在MAXN 小于1000w时都能轻松搞定。
1、
2、
1、使用notprime[]数组构成一张布尔类型的表,用O(1)的时间复杂度判断一个数是不是素数。
2、素数筛选,筛选出小于MAXN的素数。 prime[0] 存的是素数的个数。
两种素数判断法,在MAXN 小于1000w时都能轻松搞定。
1、
<pre name="code" class="cpp">/* 素数筛选 * 判断小于MAXN的数是不是素数。 * notprime是一张表,为false的是素数, * 为true的不是素数。 */<pre name="code" class="cpp">const int MAXN=100010; bool notprime[MAXN]; void init() { memset(notprime,false,sizeof(notprime)); notprime[0] = notprime[1] = true; for(int i = 2; i<MAXN; i++) if(!notprime[i]) { if (i>MAXN/i) continue; for(int j = i*i; j<MAXN; j+=i) { notprime[j] = true; } } }
2、
const int MAXN=100010; //素数筛选,筛选出小于MAXN的素数。 prime[0] 存的是素数的个数。 int prime[MAXN+1]; void getprime() { memset(prime,0,sizeof(prime)); for(int i = 2; i < MAXN;i++) { if (!prime[i]) prime[++prime[0]] = i; for(int j = 1; j<= prime[0] &&prime[j] <= MAXN/i;j++) { prime[prime[j]*i] = 1; if (i%prime[j] == 0) break; } } = }
相关文章推荐
- 《自己动手写框架9》:理想的开源框架与设计原则
- c++ --> 构造函数与析构函数
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- 最小生成树Prim算法
- MyEclipse快捷键大全
- Android自定义对话框(Dialog)位置,大小
- uibutton block
- mini2440的SDRAM分析
- Java AWT基础及布局管理
- 为EditText右侧添加删除按钮
- T-SQL编程规范
- Skype for Business Server 2015-09-测试-基本功能(建议:看PDF!)
- Skype for Business Server 2015-09-测试-基本功能(建议:看PDF!)
- 常见算法题:单链表二路归并
- UVA 12298 Super Poker II(FFT)
- Visual Basic .NET で ADO レコードセットを使用する方法
- 上传文件的最大值,post传值的最大值得修改
- CoreOS环境下通过register镜像搭建私有仓库
- 第14周上机实践项目1——小玩文件(2)
- poj 1459 Power Network 【多源多汇最大流经典问题 dinic算法】