线性递推求逆元模板+简易推论
void on_NY{
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;
}
已知 x,求 x 在 % p 的逆元
已知
p
=
p
/
x
×
x
+
j
(
j
=
=
p
m
o
d
x
)
p = p / x \times x + j (j==p mod x)
p=p/x×x+j(j==pmodx)
所以 p ≡ 0 ( m o d p ) p ≡ 0 (mod p) p≡0(modp)
所以 p / x × x + j ≡ 0 ( m o d p ) p / x \times x + j ≡ 0 ( mod p ) p/x×x+j≡0(modp)
设
k
=
p
/
x
k = p / x
k=p/x
得
k
×
x
+
j
≡
0
(
m
o
d
p
)
k \times x + j ≡ 0 (mod p )
k×x+j≡0(modp)
两边同乘
x
−
1
×
j
−
1
x^{-1} \times j^ {-1}
x−1×j−1
得
k
∗
j
−
1
+
x
−
1
≡
0
(
m
o
d
p
)
k * j ^{-1} + x ^ { -1 } ≡ 0(mod p)
k∗j−1+x−1≡0(modp)
所以
x
−
1
≡
−
k
×
j
−
1
x^{-1} ≡ -k \times j^{-1}
x−1≡−k×j−1
展开
x
−
1
≡
−
p
/
k
×
j
−
1
x^{-1} ≡ -p/k \times j^{-1}
x−1≡−p/k×j−1
因为
j
=
=
p
m
o
d
e
x
j==pmodex
j==pmodex
所以 j 的 逆元在前面求出