- 题目大意
如题目中所说一样,求计算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; }