1.递归
typedef long long ll; ll f(ll a, ll b, ll m){ if(b == 0) return 1; else if(b % 2 == 1) return a * f(a, b - 1, m) % m; else{ ll num = f(a, b/2, m) % m; return num * num % m; } }
优化:
#define ll long long ll f(ll a, ll b, ll c) { if (b == 0) return 1 % c; ll v = f(a*a % c, (b>>1), c); if (b & 1) v = v * a % c; return v; }
2.非递归
#define ll long long ll f(ll a, ll b, ll c){ ll ans = 1; while(b) { if(b & 1) ans = ans * a % c; a = a * a % c; b >>= 1; } return ans; }