核心思想:每一步把指数分成两半,底数平方。 就是降指数,即减少循环次数,时间复杂度降低,结果不变。
代码改进前,改进后:
typedef long long ll;
ll f(ll a, ll b, ll c)
{
ll ans = 1;
a %= c;
while (b != 0)
{
if (b % 2 == 1)
{
ans = (ans * a) % c;
}
b /= 2;
a = (a * a) % c;
}
return ans;
}
```cpp
typedef long long ll;
ll f(ll a, ll b, ll c)
{
ll ans = 1;
a %= c;
while (b != 0)
{
if (b&1)
{
ans = (ans * a) % c;
}
b>>=1;
a = (a * a) % c;
}
return ans;
}