新看到的求逆元的正确姿势,先记一下慢慢消化
ll inv[maxn];
void init() {
inv[1] = 1;
for (int i = 2; i < maxn; i++) inv[i] = inv[mod % i] * (mod - mod / i) % mod;
}
然后是常用的扩展欧几里得求逆元:
long long ex_gcd(long long a, long long b, long long &x, long long &y)
{
if (!b){ x = 1; y = 0; return a; }
ll r = ex_gcd(b, a % b, x, y);
ll t = x % mod;
x = y % mod;
y = ((t - a / b * y) % mod + mod) % mod;
return r;
}
//求2对于1e9+7的逆元就是 ex_gcd(2, 1e9+7, x, y),其中x的值就是inv2