poj-3641(Pseudoprime numbers)

来源:互联网 发布:淘宝卖家买家秀对比 编辑:程序博客网 时间:2024/06/03 14:39

学习快速幂之后做的第一道题,这里记录一下。

题目大意:给出两个数 a 和 p,如果 p 是一个素数,判断是否满足公式 a^p %p=a,如果满足,则输出yes,否则,输出no。附链接:http://poj.org/problem?id=3641。

大体思路:题目简单,判断素数,然后判断是否满足公式。

以下是ac代码:

#include<iostream>using namespace std;long long power(long long a,long long b,long long mod){    long long ans=1;    long long temp=a;    while(b!=0){        if(b%2)            ans=ans*temp%mod;        temp=temp*temp%mod;        b/=2;    }    return ans;}bool is_prime(long long a){    if(a<=1)        return false;    for(long long i=2;i*i<=a;i++)        if(a%i==0)            return false;    return true;}int main(){    long long p,a;    while(cin>>p>>a){        if(p==0)            break;        if(is_prime(p)){            cout<<"no"<<endl;            continue;        }        if(power(a,p,p)==a)            cout<<"yes"<<endl;        else            cout<<"no"<<endl;    }    return 0;}


1 0