/*
这题其实不难,只要慢慢看懂题目意思,按照题目说的一步一步来做,就可以AC了;
但是这里有一个地方必须要注意!下面会指出来
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
__int64 n;
__int64 calculate(__int64 k1,__int64 k2)
{
__int64 sum;
sum=1;
for(int i=1; i<=k2; i++)
{
sum=(sum*k1)%n;//这里因为可能相乘后数会很大,不能相乘后得到的大数取余,这样会丢失数据,导致错误,应该是这样每一步都取余,这样就不会错了,还有就是要用__int64
}
return sum;
}
int main()
{
__int64 fn,p,q,e,l,i,d;
__int64 a;
while(scanf("%I64d%I64d%I64d%I64d",&p,&q,&e,&l)!=EOF)
{
n=p*q;
fn=(p-1)*(q-1);
for(i=1;; i++)
{
if((i*e)%fn==(1%fn))
{
d=i;
break;
}
}
for(i=0; i<l; i++)
{
scanf("%I64d",&a);
__int64 ans;
ans=calculate(a,d);
printf("%c",ans);
}
printf("\n");
}
return 0;
}
HDU 1211
最新推荐文章于 2021-04-05 21:48:26 发布