众所周知,快速幂可以这么写:
int power(int a, int b, int p)
{
if (b == 1)return a;
int ans = power(a, b / 2, p);
ans = (long long)ans * ans % p;
if (b % 2)ans = (long long)ans * a % p;
return ans;
}
那么,如果我们每次把问题规模缩小到31,会不会更快呢?快速幂能不能这样写:
int power(int a, int b, int p)
{
if (b == 0)return 1;
if (b == 1)return a;
int ans = power(a, b / 3, p);
ans = (unsigned long long)(ans * ans % p) * ans % p;
if (b % 3 == 1)ans = (unsigned long long)ans * a % p;
else if (b % 3 == 2)ans = (unsigned long long)(ans * a % p) * a % p;
return ans;
}
求助大佬