POJ 3641
2014-03-10 20:55
302 查看
Pseudoprime numbers
Description
Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the pth power and divide by p, the remainder is a. Some (but not very many) non-prime values of p, known as base-a pseudoprimes, have this property for some a. (And some, known as Carmichael Numbers, are base-a pseudoprimes for all a.)
Given 2 < p ≤ 1000000000 and 1 < a < p, determine whether or not p is a base-a pseudoprime.
Input
Input contains several test cases followed by a line containing "0 0". Each test case consists of a line containing p and a.
Output
For each test case, output "yes" if p is a base-a pseudoprime; otherwise output "no".
Sample Input
Sample Output
Source
Waterloo Local Contest, 2007.9.23
快速幂
View Code
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 6044 | Accepted: 2421 |
Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the pth power and divide by p, the remainder is a. Some (but not very many) non-prime values of p, known as base-a pseudoprimes, have this property for some a. (And some, known as Carmichael Numbers, are base-a pseudoprimes for all a.)
Given 2 < p ≤ 1000000000 and 1 < a < p, determine whether or not p is a base-a pseudoprime.
Input
Input contains several test cases followed by a line containing "0 0". Each test case consists of a line containing p and a.
Output
For each test case, output "yes" if p is a base-a pseudoprime; otherwise output "no".
Sample Input
3 2 10 3 341 2 341 3 1105 2 1105 3 0 0
Sample Output
no no yes no yes yes
Source
Waterloo Local Contest, 2007.9.23
快速幂
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; typedef long long ll; int p,a; bool judge() { for(int i = 2; i * i <= p; i++) { if(p % i == 0) return false; } return true; } bool mod_pow(ll x,ll n) { ll res = 1; while(n > 0) { if(n & 1) res = res * x % p; x = x * x % p; n >>= 1; } return res == a; } int main() { //freopen("sw.in","r",stdin); while(~scanf("%d%d",&p,&a) && p && a) { if(!judge() && mod_pow(a,p)) printf("yes\n"); else printf("no\n"); } return 0; }
View Code
相关文章推荐
- windows 组播网卡绑定,解决多网卡通信异常问题。
- zoj 1539 Lot
- KMP字符串模式匹配详解
- 开篇第一章先说说我的昵称psd2html
- 14_字符编码
- 电梯调度(一)
- Cocos2d-x 3.0 安装与环境配置
- 内容提供者—Content Provider(二)
- ubuntu环境下搭建PHP环境(LAMP)
- 【斜率优化的新理解】 Harbingers
- 嘿嘿~~爱你哦
- AJAX file uploads in Rails using attachment_fu and responds_to_parent2
- 空间配置器
- 【黑马程序员】C语言学习笔记之常量和变量(四)
- AJAX file uploads in Rails using attachment_fu and responds_to_parent 1
- hdu3591The trouble of Xiaoqian(多重背包)
- UFLDL教程—自编码线性解码器学习
- Hadoop源代码分析之Hadoop RPC(RPC和Client)
- 企鹅广研创新班笔试、面试经历
- 贪婪的商店--避免重复搜索