素数筛法
来源:互联网 发布:淘宝开什么店比较好 编辑:程序博客网 时间:2024/06/14 20:17
NO.1原始方法:
#include<stdio.h>int n,i,j,a[1000001],p[100000],t=0;void main(){ scanf("%d",&n);//筛选范围是1~n(包括n) a[1]=0;//1不是素数记为0 for(i=2;i<=n;i++)a[i]=1;// 初始化为1 for(i=2;i<=n;i++) if(a[i])//从i(i=2)开始,i是素数,就把所有是2的倍数的记为0,结束后i++ { p[t++]=i;//用数组p记录素数 for(j=i+i;j<=n;j+=i)a[j]=0; } for(i=0;i<t;i++) printf("%d%c",p[i],i<t-1?' ':'/n');//输出结果 }NO.2//2:优化后的筛法,手动地模拟原始筛法就可以发现,某个数字可能被不止一次地删去
// 优化后的筛法就可以避免这种不必要的删去操作
#define Max 1000000 bool prime[Max]; void IsPrime(){ prime[0]=prime[1]=0;prime[2]=1; for(int i=3;i<max;i++) prime[i]=i%2==0?0:1; int t=(int)sqrt(Max*1.0); for(int i=3;i<=t;i++) if(prime[i]) for(int j=i*i;j<Max;j+=2*i)//优化 prime[j]=0; }NO.3//素数的二次筛法
//与前两种筛法不同,此种筛法中prime[i]=2*i+3(即:我们只存储奇数,偶数肯定不是素数的)
#define Max 1000000 bool prime[Max>>1]; void IsPrime(){ memset(prime,true,sizeof(prime)); int n=Max>>1,m=(int)(sqrt(Max*1.0)/2.0); for(int i=0;i<=m;i++) if(prime[i]) for(int j=2*i*i+6*i+3;j<=n;j+=2*i+3) isprime[j]=false; }
阅读全文
1 0
- 又见素数(素数筛法)
- nyoj 26 孪生素数 素数筛法
- HDU 4548 美素数 // 素数筛法
- 素数判断和素数筛法
- 素数筛法-----》大规模的判断素数
- 素数筛(筛选法求素数)
- 素数筛选法(素数筛)
- 森德拉姆素数筛法
- 素数筛法
- 素数筛法
- 筛法素数表
- 筛素数法
- POJ2262 素数筛法
- POJ3306 素数筛法
- 素数筛法
- 素数筛法
- 素数筛法
- 【数学】素数筛法
- c#反射文章
- 贪吃蛇 (C语言 适合新手 模块化)
- FZU2272+Frog+签到题+第八届福建省大学生程序设计竞赛
- 《Qt学习之路--序言》
- 二叉树面试题(基础篇二叉树的相关面试题(基础篇)
- 素数筛法
- HDU5983 Pocket Cube(模拟)
- SQL中char、varchar、nvarchar的区别
- 3.熟悉Python
- Java疯狂讲义读书笔记第六章(二)
- 手机数据竟然能找回来!没想到是因为这个
- rocketmq 云主机安装外部链接失败
- 安卓学习笔记之IntentService
- 一件工作,甲乙合作6天可以完成,乙丙合作10天可以完成.如果甲丙合作3天后,由乙单独做,还要9天才能完成.如果全部工作由3人合作,需几天可以完成?