#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int d[1000],n,m;
int qcal(int a,int n,int m)
{
int res=1;
while(n)
{
if(n&1)
res=res*a%m;
n>>=1;
a=a*a%m;
}
return res;
}
int pcal(int n)
{
int m=(int)sqrt(n+0.5);
int res=n;
for(int i=2;i<=m;i++)
if(n%i==0)
{
res=res/i*(i-1);
while(n%i==0)
n/=i;
}
if(n>1)
res=res/n*(n-1);
return res;
}
int solve(int lo,int m)
{
if(lo==n-1)
return d[lo]%m;
int phi=pcal(m);
int t;
// if(d[lo+1]>=phi)
t=solve(lo+1,phi)+phi;
// else
// t=solve(lo+1,m);
return qcal(d[lo],t,m);
}
int main()
{
char str[1000];
int t=1;
while(~scanf("%s",str)&&str[0]!='#')
{
sscanf(str,"%d",&m);
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&d[i]);
printf("Case #%d: %d\n",t++,solve(0,m));
}
}
指数循环节 uva 10692
最新推荐文章于 2019-07-27 20:28:00 发布