- 题目大意
如题目中所说一样,求计算a1^a2^a3^a4......^an模m的值。
- 解题思路
利用欧拉降幂公式,和欧拉函数即可解决。
- 代码
#include<iostream>
#include<cstring>
using namespace std;
long long b;
long long num[10000];
long long powMod(long long a, long long n,long long p)
{
long long ans = 1;
for (; n > 0; n >>= 1)
{
if (n & 1)
ans = ans * a%p;
a = a * a%p;
}
return ans;
}
long long getPhi(long long n) {
int phi = n;
for (int i = 2; i*i <= n; i++) {
if (n%i != 0) continue;
phi = phi / i * (i - 1);
while (n%i == 0) n /= i;
}
if (n > 1) {
phi = phi / n * (n - 1);
}
return phi;
}
long long ss(long long d, long long M) {
if (d == b - 1)
return num[d] % M;
long long phi = getPhi(M);
long long c = ss(d + 1, phi) + phi;
return powMod(num[d], c, M);
}
int main()
{
char a[10];
long long c = 1;
while (cin >> a)
{
if (!strcmp(a,"#"))
break;
cin >> b;
for (long long i = 0; i < b; i++)
cin >> num[i];
long long e = atoi(a);
cout << "Case " << "#" << c << ": " << ss(0,e)<< endl;
c++;
}
return 0;
}