1.什么原理,为什么不会爆ll?
2.时间复杂度怎么分析?
3.担心爆ll,能直接用ull存吗?
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll quick_mul(ll a, ll b, ll p)
{
ll res = 0;
while(b)
{
if(b & 1) res = (res + a) % p;
a = (a + a) % p;
b >>= 1;
}
return res;
}
ll quick_pow(ll a, ll b, ll p)
{
ll ans = 1 % p;
while(b)
{
if(b & 1) ans = quick_mul(ans, a, p) % p;
a = quick_mul(a, a, p) % p;
b >>= 1;
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll a, b, p;
cin >> a >> b >> p;
cout << quick_pow(a,b,p) << endl;
return 0;
}