雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

判断素数+二分快速求幂——pku3641

Posted on 2011-04-28 19:49  huhuuu  阅读(391)  评论(0编辑  收藏  举报
View Code
#include<stdio.h>
#include
<math.h>

int prim(int p)
{
int t=(int)sqrt(1.0*p);
int i;
for(i=2;i<=t;i++)
{
if(p%i==0)
return 0;
}
return 1;
}

int mon(int x,int exp,int p)
{
if(exp==0)
return 1;
__int64 ret
=mon(x,exp>>1,p);
ret
=(ret*ret)%p;
if(exp&1)
{
ret
=(ret*x)%p;
}
return (int)ret;
}

int main()
{
int p,a;
while(scanf("%d%d",&p,&a),p||a)
{
if(prim(p)==0&&mon(a,p,p)==a)
{
printf(
"yes\n");
}
else
printf(
"no\n");
}
}