inv[1] = 1;
printf("%lld\n",inv[1]);
for(int i = 2; i <= n; i++)
inv[i]=((p - p / i) * (inv[p % i])%p)%p;
已知
1
/
i
≡
i
p
−
2
(
m
o
d
p
)
1 / i ≡ i ^ {p-2} (mod p)
1/i≡ip−2(modp)
所以可以使用快速幂来进行求解,但时间复杂度为O(n
×
\times
×logn) n大的时候常数太大
所以要学会线性递推求逆元
设 t = p / i ,k = p % i;
p = i
×
\times
× t + k ;
0 Ξ i
×
\times
× t + k (mod p)
移项
- i
×
\times
× t Ξ -k ( mod p)
同除 ( i × \times × k )
-( t / k ) Ξ 1 / i (mod p)
带入
1 / i Ξ - (p / i / ( p % i ) ) (mod p)
1 / i Ξ (- p / i × \times × (1 / (p%i) ) ) (mod p)
设 inv [ x ] 为x的逆元