【POJ】3641

来源:互联网 发布:手机电影剪辑软件 编辑:程序博客网 时间:2024/06/15 04:30

http://poj.org/problem?id=3641

满足
①p不是素数
②存在a > 1使得a^p = a (mod p)
的p是伪素数。

现给出p和a,判断p是否是伪素数。

快速幂应用。

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <algorithm>using namespace std;__int64 p,a;__int64 qpow(__int64 a,__int64 b){    __int64 mod=b;    __int64 ans=1;    while (b){        if (b&1) ans=(ans*a)%mod;        a=(a*a)%mod;        b>>=1;    }    return ans;}bool is(__int64 n){    for (__int64 i=2;i*i<=n;i++){        if (n%i==0) return false;    }    return true;}int main(){    while ((cin >> p >> a)&&(p+a)){        if (is(p)){            cout << "no" << endl;        }        else        if (qpow(a,p)==a){            cout << "yes" << endl;        }        else{            cout << "no" << endl;        }    }}