Skip to Content

Exponentiation II

Explicación

Sea M=109+7M = 10^{9} + 7.

El pequeño teorema de Fermat nos dice que ap11(modp)a^{p - 1} \equiv 1 \pmod{p}, así que podemos calcular abc(modM1)(modM)a^{b^c \pmod{M - 1}} \pmod{M} con exponenciación modular.

Implementación

Complejidad temporal: O(logP)\mathcal{O}(\log P)

#include <bits/stdc++.h> using namespace std; using ll = long long; const ll MOD = 1e9 + 7; // BeginCodeSnip{Binary Exponentiation} ll exp(ll x, ll n, ll m) { assert(n >= 0); x %= m; ll res = 1; while (n > 0) { if (n % 2 == 1) { // si n es impar res = res * x % m; } x = x * x % m; n /= 2; // dividir por dos } return res; } // EndCodeSnip int main() { int test_num; cin >> test_num; for (int t = 0; t < test_num; t++) { ll a, b, c; cin >> a >> b >> c; ll pow_bc = exp(b, c, MOD - 1); ll ans = exp(a, pow_bc, MOD); cout << ans << '\n'; } }
MOD = int(1e9) + 7 for _ in range(int(input())): a, b, c = map(int, input().split()) pow_bc = pow(b, c, MOD - 1) print(pow(a, pow_bc, mod))