[快速幂] POJ-3641 Pseudoprime numbers
来源:互联网 发布:吉林国际软件 编辑:程序博客网 时间:2024/05/17 03:51
Pseudoprime numbers
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 10782 Accepted: 4660Description
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 Outputno
no
yes
no
yes
yes
题意:给出两个数a,p.若p是素数输出no,否则判断a的p次方对p取模之是不是等于a
//已AC代码#include<iostream>#include<cstdio>#include<cctype>#include<cstring>#include<string.h>#include<math.h>typedef long long int ll;using namespace std;ll power(ll a, ll b, ll mod){ ll res=1; while(b>0) { if(b&1) res=res*a%mod; b=b>>1; a=a*a%mod; } return res;}bool isPrime( int num ){ if(num ==2|| num==3 ) return 1 ; if(num %6!= 1&&num %6!= 5) return 0 ; int tmp =sqrt( num); for(int i= 5;i <=tmp; i+=6 ) if(num %i== 0||num %(i+ 2)==0 ) return 0 ; return 1 ; }int main(){ int p,a; while(~scanf("%d%d",&p,&a)&&(a+p)) { /*cout<<"a="<<a<<endl; cout<<"p="<<p<<endl; int y1=power(a,p,p); int y2=a%p; cout<<"mod1:"<<y1<<endl; cout<<"mod2:"<<y2<<endl; cout<<"a是素数?"<<isPrime(a)<<endl;*/ if((a==(power(a,p,p)))&&!isPrime(p)) { puts("yes"); } else puts("no"); }}
- poj 3641 Pseudoprime numbers 【快速幂】
- POJ 3641 - Pseudoprime numbers(快速幂)
- Pseudoprime numbers(POJ-3641)(快速幂)
- POJ 3641 Pseudoprime numbers(快速幂+素数)
- POJ 3641 Pseudoprime numbers【素数+快速幂】
- POJ 3641 Pseudoprime numbers (快速幂)
- POJ:3641 Pseudoprime numbers(快速幂)
- poj-3641-Pseudoprime numbers【快速幂】
- POJ 3641 Pseudoprime numbers 【快速幂】
- poj 3641 Pseudoprime numbers 快速幂算法
- POJ 3641 Pseudoprime numbers (快速幂)
- Pseudoprime numbers 【poj-3641】【快速幂】
- [快速幂] POJ-3641 Pseudoprime numbers
- POJ-3641 Pseudoprime numbers(快速幂)
- [数论]POJ 3641/HOJ 2700 Pseudoprime numbers 快速幂
- POJ 3641 Pseudoprime numbers (快速幂、素性测试)
- POJ 3641 Pseudoprime numbers (伪素数_快速幂)
- poj 3641 Pseudoprime numbers 快速幂+素数判定 模板题
- POJ1837-Balance(01背包)
- Mapped Statements collection does not contain value for
- Java 基础 —— Objects and Classes
- C语言制作游戏——贪吃蛇
- 【threejs学习随记(三)】3D模型导入问题
- [快速幂] POJ-3641 Pseudoprime numbers
- Refetion2017.9.7
- Servlet 生命周期
- java JAR 将两个类文件放在同一目录的方法
- UVa1610 习题8-2 聚会游戏
- centos['sentəʊs]
- android路径相关
- 奇异值分解SVD
- Mapreduce之WordCount的三种运行方式