#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cctype>
using namespace std;
typedef long long LL;
int a[120], n;
LL u, m;
LL phi(LL n){
LL ans = n;
for(int i = 2; i*i <= n; i++){
if(n%i == 0){
ans -= ans/i;
while(n%i == 0)
n /= i;
}
}
if(n > 1) ans -= ans/n;
return ans;
}
LL Pow(LL a, LL p, LL mod){
LL ans=1;
while(p)
{
if(p&1)
{
ans=ans*a;
if(ans>mod)
ans=ans%mod+mod;
}
a=a*a;
if(a>mod)
a=a%mod+mod;
p>>=1;
}
return ans;
}
LL dfs(int pos, LL m){
if(pos == n-1) return a[pos]%m + m;
LL p = phi(m);
LL s = dfs(pos+1, p);//设x为指数, s即为x%p + p
LL ans = Pow(a[pos], s, m);
return ans;
}
int main()
{
int cas = 1, t;
LL s;
char str[120];
while(scanf("%s",str), str[0] != '#'){
m = atoi(str);
scanf("%d",&n);
for(int i = 0; i < n; i++) scanf("%d",&a[i]);
printf("Case #%d: %d\n",cas++, dfs(0, m) %m);
}
return 0;
}
/*
指数循环节的模板题
*/
UVA 10692 Huge Mods 指数循环节
最新推荐文章于 2020-02-17 21:52:02 发布