0%

Barrett 优化取摸

Barrett 取模优化,通常在模数为输入的情况下使用。

Tips:适用于 int 范围内的模数,已经特判了 P=1P = 1 的情况,不用做其它任何处理。

1
2
3
4
5
6
7
8
struct Mod {
using ULL = unsigned long long;
ULL m, p;
void init(ULL _p) {p = _p; m = (__int128(1) << 64) / p;}
ULL operator()(ULL x) {
return p == 1 ? 0 : x - (__int128(x) * m >> 64) * p;
}
} mod;