HDU 1905Pseudoprime numbers(快速幂)

来源:互联网 发布:2016淘宝开店步骤 编辑:程序博客网 时间:2024/05/21 09:01

题意:

a的p次方p取模等于a,且p不是素数,就输出yes;

#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#define ll long longusing namespace std;ll powermod(ll a,ll b,ll c){ll ans=1;a = a % c;while(b>0){if(b%2) ans = (ans * a) %c;b = b/2;a = (a * a)%c;}return ans;} bool jud(ll x){ll te = sqrt(x);for(int i =2 ;i <= te; i++)if(!(x % i)) return 1;//x不是素数返回true return 0;}int main(){ll p,a; while(scanf("%I64d%I64d",&p,&a)){if(p == 0&&a == 0) break;ll te = powermod(a, p, p);if(te == a && jud(p)) puts("yes");else puts("no");}return 0;}