E

- 题目大意

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

  

原文地址:https://www.cnblogs.com/alpacadh/p/8448355.html