素数判定算法小结
2014-07-30 17:22
375 查看
素数算法小结
发现很多程序设计题目都需要用到素数判定算法,我也遇到过很多,有的对时间复杂度没有严格的要求,这时候我们时候简单的判定算法即可,而有时对于时间的要求非常严格,这时候就需要一些改进和优化了。素数的定义:除了1和它本身,不能被其他所有数整除;
下面我来总结一下我自己知道的算法:
最简单的判断:
根据定义,我们只需要从2开始到n结束,做一遍循环判断即可;
bool flag = true; for (int i = 2; i < n; i++) { if (n % i == 0) { flag = false; break; } }
简单判定的优化:
将被除数判断范围缩小到2~
sqrt(n)
bool flag = true; for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) { flag = false; break; } }
利用素数优化:
将判断范围缩小到所有小于n的素数,若一个数不能被所有素数整除,则它本身也是素数
vector<int> v; v.push_back(2); for (int i = 3; i < N; i++) { bool flag = true; for (vector<int>::const_iterator it = v.begin(); *it <= sqrt(i); it++) { if (i % *it == 0) { flag = false; break; } } if (flag) { v.push_back(i); } }
筛选算法:
从2开始,将是其2~m倍的数标记,循环到n时,未标记的数都是素数
bool *array = new int ; for (int i = 2; i < n; i++) { for (int j = 2; i * j < n; j++) { array[i * j] = false; } }
素数表:
将2~n的所有素数记录在表中,需要时查表
table[i]即可得到
费马小定理
相关文章推荐
- 一些普通的素数判断方法至素数判定Miller_Rabin 算法详解
- 质数(素数)判定算法
- 费马因式分解算法优化及素数判定
- ECPP——利用有限域上的椭圆曲线,精确判定素数的算法
- 费马小定理 素数判定 蒙哥马利算法
- 【算法记录1】判定素数
- 素数判定Miller_Rabin 算法详解
- 你知道如何判定一个大整数为素数吗?——米勒拉宾素数判定算法
- 公钥密码之RSA密码算法大素数判定:Miller-Rabin判定法!
- 素数判定——Miller Rabin 算法
- 素数的Miller_Rabbin判定算法
- 素数判定算法
- 素数判定算法,紫书P194素数判定
- 算法之路二:刘汝佳算法竞赛入门经典 组合数和素数判定
- 素数判定算法的实现
- 素数判定算法
- 关于素数判定的算法优化
- 算法基础 - 素数判定(Miller-Rabin算法)
- 素数判定算法
- ACM -- 算法小结(十)素数的两种打表法