首页 > 代码库 > hdu1905 Pseudoprime numbers

hdu1905 Pseudoprime numbers

快速幂;

#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int prime(const int p)
{
    for(int i=3; i*i<=p; i++)
        if(p%i==0)
            return 0;
    return 1;
}
int power(const int a,const int p)
{
    long long res=1,n=p,ta=a;
    while(n)
    {
        if(n&1)
            res=res*ta%p;
        ta=ta*ta%p;
        n=n>>1;
    }
    return res;
}
int main(void)
{
    int a,p;
    while(scanf("%d%d",&p,&a),a&&p)
    {
        if(prime(p))
            printf("no\n");
        else
        {

            if(power(a,p)==a)
                printf("yes\n");
            else
                printf("no\n");
        }
    }
    return 0;
}


hdu1905 Pseudoprime numbers