筛法素数打表方法
来源:互联网 发布:javascript 策略模式 编辑:程序博客网 时间:2024/06/05 09:08
埃拉托斯特尼筛法,是一种公元前250年由古希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。
给出要筛数值的范围n,找出以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数,也就是3筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去......。
筛法素数时间复杂度o(log log n),基本接近线性,测试一亿个数据2.48秒
下面是比较优化的C++语言代码
const int maxn = 102410240;bool isp[maxn];void init(){ memset(isp, true, sizeof(isp)); isp[0] = isp[1] = false; const int max1 = sqrt(maxn + 0.5); for(int i = 2; i <= max1; i++) if(isp[i]) for(int j = i * i; j < maxn; j += i) isp[j] = false;}
下面是更好的,速度更快的线性筛法测试十亿个数据1.23秒:
const int maxn = 102410240;bool check[maxn] = {1, 1};int pri[maxn], tot;void init(){for (int i = 2; i < maxn; ++i){if (!check[i]) pri[tot++] = i;for (int j = 0; j < tot && pri[j] * i < maxn; ++j){check[pri[j]*i] = true;if (!(i % pri[j])) break;}}}
1 0
- 筛法素数打表方法
- 素数打表方法比较
- 线性筛打素数表
- 筛选法打素数表
- 筛选法素数打表
- 素数打表的快速方法
- 素数打表(方法汇总)
- 打素数表高效方法(线性)
- 素数打表(两种方法)
- 素数判定 - 素数打表
- hdu1397素数筛+打表+标记+二分
- hdu 2138 How many prime numbers(打srt(n)素数表加快筛素数法)
- hdoj 1431 素数回文【素数筛法+回文数判断打表】
- hdoj 1431 素数回文【打表+素数筛法+回文数判断】
- 素数筛算法与素数打表[数学]
- 筛选法求素数 打表
- 打素数表
- 素数打表
- 【leetcode 二叉树路径和】Path Sum 和 Path Sum II
- Codeforces Round #277.5 (Div. 2)A. SwapSort
- Android核心基础——Day02_1
- 操作系统 学习笔记3-内存管理
- springmvc的几个关键的点的整理
- 筛法素数打表方法
- Python os模块
- java学习——封装、继承
- JSP详细篇——response对象
- 过河问题(南阳oj47)(贪心)
- AFNetworking使用总结
- SSH Web (webshell)
- sfdfsdf
- java中String byte HexString的转换