sicily 1454. Pseudoprime numbers

#include<iostream>    
#include<stdio.h>
#include<cmath>
using namespace std;
int is_prime(int x)
{
int m=floor(sqrt((double)x)+0.5);
for(int i=2;i<=m;++i)
if(x%i==0)
return 0;
return 1;
}
int power(int a,int b,int m) //快速幂取模计算 (a^b)%m
{

if(a==0)
return 0;
else if(b==0)
return 1;
long long r=a%m,k=1;
while(b>1)
{
if((b&1)==1)
k=(k*r)%m;
r=(r*r)%m;
b=b>>1;
}
return (r*k)%m;
}
int main()
{
int p,a;
while(scanf("%d%d",&p,&a) && p )
{
if( !is_prime(p) && power(a,p,p)==a )
printf("yes\n");
else
printf("no\n");
}
return 0;
}

posted on 2011-07-05 02:00  sysu_mjc  阅读(166)  评论(0编辑  收藏  举报

导航