// 快速幂,求a^b mod p
int power(int a, int b, int p) {
int ans = 1;
for (; b; b >>= 1) {
if (b & 1) ans = (long long)ans * a % p;
a = (long long)a * a % p;
}
return ans;
}
// 64位整数乘法的O(log b)算法
long long mul(long long a, long long b, long long p) {
long long ans = 0;
for (; b; b >>= 1) {
if (b & 1) ans = (ans + a) % p;
a = a * 2 % p;
}
return ans;
}
// 64位整数乘法的long double算法
long long mul(long long a, long long b, long long p) {
a %= p, b %= p; // 当a,b一定在0~p之间时,此行不必要。
long long c = (long double)a * b / p;
long long ans = a * b - c * p;
if (ans < 0) ans += p;
else if (ans >= p) ans -= p;
return ans;
}
算法竞赛进阶指南--快速幂,求a^b mod p
猜你喜欢
转载自blog.csdn.net/weixin_43627118/article/details/105506937
今日推荐
周排行