素数筛选(转载)
来源:互联网 发布:中国中医药数据库 编辑:程序博客网 时间:2024/06/03 19:52
素数筛选:
所谓的素数筛选其实依据一个bool型数组来实现筛选。将数组下标为奇数的等于true,偶数为false.
然后:
for( i=3; i<=sqrt(n); i+=2 )
{ if(prime[i])
for( j=i+i; j<=n; j+=i ) prime[j]=false;
}
最后输出下标为true的数就好了;
原理:质数的倍数必然是合数,如果这个数已经不是质数了,则找他后面的质数将其筛掉。
下面举个例子:筛选30以内的素数。
1. 将 4 6.....28 30定义为false.(实际就是先排除2的倍数)
2. i=3; 由于prime[3]=true, 把prime[6], [9], [12], [15], [18], [21], [24], [27], [30]标为false.
i=4; 由于prime[4]=false,不在继续筛法步骤。
i=5; 由于prime[5]=true, 把prime[10],[15],[20],[25],[30]标为false.
i=6>sqrt(30)算法结束。
3 。 把prime[]值为true的下标输出来:
for(i=2; i<=30; i++)
if(prime[i]) printf("%d ",i);
结果是 2 3 5 7 11 13 17 19 23 29
下面附上代码:
#include<stdio.h> #include<math.h> #define N 30 bool prime[N]; int main() { int i, j; prime[2]=true; for(i=3; i<N; i++) if(i%2==0) prime[i]=false; else prime[i]=true; for(i=3; i<=sqrt(N); i++) { if(prime[i]) for(j=i+i; j<N; j+=i) prime[j]=false; } for(i=2; i<30; i++) if( prime[i] )printf("%d ",i); return 0; }
转载的。。。希望像我这样的初学者能够好好理解理解。。。。。2 0
- 素数筛选(转载)
- 素数筛选(模板)
- hdu1164(素数筛选)
- 【转载】三种素数筛选法详解
- 线性筛选素数(欧拉筛选)
- 素数筛(筛选法求素数)
- 素数筛选法(素数筛)
- 1716: Divisors(素数筛选)
- pku2689(筛选素数法)
- 寻找素数(筛选法)
- poj 3518(筛选素数)
- 素数筛选法(模板)
- 素数筛选法(预处理)
- 求素数(普通+筛选)
- 线性筛选素数(模板)
- 素数筛选
- 筛选素数
- 素数筛选
- PM2 使用介绍
- 任大炮最新内部演讲全文:这种城市将来一定暴涨
- (二十)剑指offer之字符串的排列
- ant-design antd 地址
- js与后台交互
- 素数筛选(转载)
- JS正则校验
- 判断一个链表是否为循环单链表
- C++ 操作符重载
- flume拦截器及问题解决
- struts2与OGNL表达式
- python 实现ftp上传下载文件
- 跳转到页面固定位置
- 摸爬滚打DirectX11_day_09——模板技术