src/jiangly/math/01-Power.hpp
Code
/** 快速幂 - 普通版
* 2023-10-09: https://atcoder.jp/contests/tenka1-2017/submissions/46411797
**/
int power(int a, i64 b, int p) {
int res = 1;
for (; b; b /= 2, a = 1LL * a * a % p) {
if (b % 2) {
res = 1LL * res * a % p;
}
}
return res;
}
/** 快速幂 - 手写乘法
* 2023-09-27: https://qoj.ac/submission/189343
**/
using i64 = long long;
i64 mul(i64 a, i64 b, i64 p) {
i64 c = a * b - i64(1.0L * a * b / p) * p;
c %= p;
if (c < 0) {
c += p;
}
return c;
}
i64 power(i64 a, i64 b, i64 p) {
i64 res = 1;
for (; b; b /= 2, a = mul(a, a, p)) {
if (b % 2) {
res = mul(res, a, p);
}
}
return res;
}
#line 1 "src/jiangly/math/01-Power.hpp"
/** 快速幂 - 普通版
* 2023-10-09: https://atcoder.jp/contests/tenka1-2017/submissions/46411797
**/
int power(int a, i64 b, int p) {
int res = 1;
for (; b; b /= 2, a = 1LL * a * a % p) {
if (b % 2) {
res = 1LL * res * a % p;
}
}
return res;
}
/** 快速幂 - 手写乘法
* 2023-09-27: https://qoj.ac/submission/189343
**/
using i64 = long long;
i64 mul(i64 a, i64 b, i64 p) {
i64 c = a * b - i64(1.0L * a * b / p) * p;
c %= p;
if (c < 0) {
c += p;
}
return c;
}
i64 power(i64 a, i64 b, i64 p) {
i64 res = 1;
for (; b; b /= 2, a = mul(a, a, p)) {
if (b % 2) {
res = mul(res, a, p);
}
}
return res;
}
Back to top page