ll a, b, m; intgetRes(ll a, ll b, ll m) { if (b == 0) return1; if (b % 2 == 1) { return a * getRes(a, b - 1, m) % m; } else { ll mul = getRes(a, b / 2, m); return mul * mul % m; } }
intmain() { cin >> a >> b >> m; cout << getRes(a, b, m); return0; }
迭代
将幂指数作二进制数位运算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include<bits/stdc++.h> using namespace std; typedeflonglong ll;
ll a, b, m;
intmain() { cin >> a >> b >> m; ll ans = 1, cur = a; while (b > 0) { if (b & 1) ans = ans * cur % m; cur = cur * cur % m; b >>= 1; } cout << ans; return0; }