HDU1211题意为利用算法公式m=c^d%n其中 n=q*p 与e*d%f=1%f而f=(p-1)*(q-1)
本题就一个地方处理一下其他方面相对来说很水,首先题目是已知c、p、q那么你可以从中求取d那么d就是所谓的e的逆元为了能加快寻找利用f的关系求出逆元,最后利用蒙哥马利罗比算法求出m。
#include"stdio.h"
int fun(int a,int b,int n)
{
//返回a^b%n 蒙哥马利罗比算法
int res=1;;
while(b)
{
if(b%2)
{
res*=a;
res%=n;
}
a*=a;
a%=n;
b/=2;
}
return res;
}
int main()
{
int p,q,e,l,i,m,n,f,d;
while(scanf("%d%d%d%d",&p,&q,&e,&l)!=EOF)
{
n=p*q;
f=(p-1)*(q-1);
int d=f/e+1;
while(1)//找到e的逆元d
{
if(d*e%f==1)
break;
else
d++;
}
char ch;
for(i=0;i<l;i++)
{
scanf("%d",&m);
printf("%c",fun(m,d,n));
}
printf("\n");
}
}