乘法逆元
inv[1] = 1;
for (int i = 2; i <= n; ++i) {
inv[i] = (long long)(p - p / i) * inv[p % i] % p;
}Last updated
inv[1] = 1;
for (int i = 2; i <= n; ++i) {
inv[i] = (long long)(p - p / i) * inv[p % i] % p;
}Last updated
s[0] = 1;
for (int i = 1; i <= n; ++i) s[i] = s[i - 1] * a[i] % p;
sv[n] = qpow(s[n], p - 2);
for (int i = n; i >= 1; --i) sv[i - 1] = sv[i] * a[i] % p;
for (int i = 1; i <= n; ++i) inv[i] = sv[i] * s[i - 1] % p;ll exgcd(ll a, ll b, ll& x, ll& y) //扩展欧几里得算法
{
if (b == 0) {
x = 1, y = 0;
return a;
}
ll ret = exgcd(b, a % b, y, x);
y -= a / b * x;
return ret;
}
ll getInv(int a, int mod) //求a在mod下的逆元,不存在逆元返回-1
{
ll x, y;
ll d = exgcd(a, mod, x, y);
return d == 1 ? (x % mod + mod) % mod : -1;
}