poj3641(快速幂,以及素性测试方法的总结)
2016-10-28 16:43
246 查看
/* translation: 给出一个数,判断其是否是伪素数。一个数是伪素数满足下面两个条件: 1,p不是素数。 2,满足费马定理a^p==a(mod p) solution: 快速幂简单题。 快速幂计算,然后朴素素性测试即可 note: * 总结下素性测试的几个方法 1:朴素素性测试(反复平方法) 即从2~根号n根据素数的性质判断,如果有数字能够整除N.说明n不是素数。复杂度O(根号n) 2: 埃氏筛法 复杂度为O(nloglogn)。但是同时对于空间的要求比较高。因为筛去的结果要保存在一个bool数组 里面。与朴素测试相比,是对连续一整段数字进行判断。通常用来打表。 3: miller-robin随机性素数测试 是针对单个数的测试,有一定概率失败。但是可处理的数据量可以达到2^64左右 date: 2016.10.28 */ #include <iostream> #include <cstdio> using namespace std; const int maxn = 1e9; typedef long long ll; ll p, a; ll powMod(ll x, ll n, ll mod) { ll res = 1; while(n > 0){ if(n & 1) res = res * x % mod; x = x * x % mod; n >>= 1; } return res; } bool isPrime(ll x) { for(ll i = 2; i*i <= x; i++){ if(x % i == 0) return false; } return true; } int main() { while(cin >> p >> a){ if(!p && !a) break; if(!isPrime(p) && powMod(a, p, p) == a) cout << "yes\n"; else cout << "no\n"; } return 0; }
相关文章推荐
- AndroidUiAutomator使用Jenkins搭建持续集成测试系统Ⅰ—Android UiAutomator以及快速编译方法
- 关于测试方法以及测试用例设计的一些总结
- mysql快速生成测试数据的方法,以及分页limit语句优化
- 报表测试用例设计方法总结
- Ubuntu 中软件的安装、卸载以及查看的方法总结
- 百度快速收录新站的规则以及对应方法
- B/S结构测试的基本方法总结(不全的希望大家补充)
- 绘制不规则位图方法总结,多种实现方法,全面测试比较
- 绘制不规则位图方法总结,多种实现方法,全面测试比较!
- CETK测试原理/测试方法/测试结果分析以及常见WinCE Test Kit运行问题的排查
- Ubuntu 中软件的安装、卸载以及查看的方法总结
- 基于投影方法的碰撞检测以及一个测试DEMO【C + SDL】
- 绘制不规则位图方法总结,多种实现方法,全面测试比较
- 网站测试基本方法-8. 网站功能测试总结
- (转)window.open()使用方法以及传参数的问题总结
- JS中正规表达式的用法以及常用的方法总结
- 谈论软件测试步骤以及方法
- 谈论软件测试步骤以及方法
- 比较全面DataRow的映射的helper,兼测lambda方式的快速SetValue方法(测试结果大大出乎意料)
- Ubuntu 中软件的安装、卸载以及查看的方法总结