0. 前言
写这个文章是因为遇到一些题,要求解 x / y % m o d x/y\%mod x/y%mod, 其中 m o d = 1 e 9 + 7 mod = 1e9+7 mod=1e9+7, x , y x,y x,y都很大。不能直接求。 当然,第一次总是不会做的, 然后就查资料呗。
1. 逆元定义
我们要求问题
x
/
y
%
m
o
d
x/y\%mod
x/y%mod, 如果我们找到这样一个数
y
^
\hat{y}
y^, 满足
x
∗
y
^
%
p
=
x
/
y
%
p
x*\hat{y}\%p=x/y\%p
x∗y^%p=x/y%p。 那么, 我们的问题就解决了。 这个
y
^
\hat{y}
y^就是
y
y
y关于
m
o
d
mod
mod的逆元。满足定义:
y
∗
y
^
≡
1
%
p
y*\hat{y} \equiv 1 \%p
y∗y^≡1%p
1.1 用费马小定理求解
另外,还有两种常见的解法是枚举法和拓展欧几里得法,但是不常用。一般都用这个。下面是费马小定理的定义:
- 设 0 < x , y < p 0 < x, y < p 0<x,y<p, p p p是素数。
- 如果 a a a, p p p互质,则: a p − 1 ≡ 1 % p a^{p-1} \equiv 1 \% p ap−1≡1%p, a ∗ a p − 2 ≡ 1 % p a * a^{p-2} \equiv 1 \% p a∗ap−2≡1%p, 这样我们就找到了 a a a关于p的逆元为 a p − 2 a^{p-2} ap−2。
- 那么,我们的问题就解决了, x / y % p = x ∗ y p − 2 % p x/y\%p = x * y^{p-2} \% p x/y%p=x∗yp−2%p
1.2 编程实现
- 用快速幂来求 y p − 2 y^{p-2} yp−2.
ll qmi(ll x, ll y){
if( y == 0) return 1;
if(y == 1) return x;
ll ret = qmi(x, y / 2);
if(y % 2==0) return ret * ret % mod;
return ret % mod * ret % mod * x % mod;
}
1.3 例题
3. 扩展
3.1 Lucas 定理
设:
n
=
s
∗
p
+
q
n=s*p+q
n=s∗p+q,
m
=
t
∗
p
+
r
m=t*p+r
m=t∗p+r,
(
q
,
r
≤
p
)
(q, r \leq p)
(q,r≤p)。有:
(
s
p
+
q
t
p
+
r
)
≡
(
s
t
)
(
q
r
)
(
m
o
d
(
p
)
)
\left(\begin{array}{l}s p+q \\ t p+r\end{array}\right) \equiv\left(\begin{array}{l}s \\ t\end{array}\right)\left(\begin{array}{l}q \\ r\end{array}\right)(\bmod (p))
(sp+qtp+r)≡(st)(qr)(mod(p))
3.1.2 Lucas 定理证明
首先你需要这个算式:
(
p
f
)
≡
0
(
m
o
d
(
p
)
)
\left(\begin{array}{c}p \\ f\end{array}\right) \equiv 0(\bmod (p))
(pf)≡0(mod(p))
其中: f
>
0
&
&
f
<
p
>0 \& \& f<p
>0&&f<p, 然后
(
1
+
x
)
n
≡
(
1
+
x
)
s
p
+
q
≡
(
(
1
+
x
)
p
)
s
⋅
(
1
+
x
)
q
≡
(
1
+
x
p
)
s
⋅
(
1
+
x
)
q
(
m
o
d
p
)
(1+x)^{n} \equiv(1+x)^{s p+q} \equiv\left((1+x)^{p}\right)^{s} \cdot(1+x)^{q} \equiv\left(1+x^{p}\right)^{s} \cdot(1+x)^{q}(\bmod p)
(1+x)n≡(1+x)sp+q≡((1+x)p)s⋅(1+x)q≡(1+xp)s⋅(1+x)q(modp)
≡
∑
i
=
0
s
(
s
i
)
⋅
x
i
⋅
p
⋅
∑
j
=
0
q
(
q
j
)
⋅
x
j
(
m
o
d
p
)
\equiv \sum_{i=0}^{s}\left(\begin{array}{l}s \\ i\end{array}\right) \cdot x^{i \cdot p} \cdot \sum_{j=0}^{q}\left(\begin{array}{l}q \\ j\end{array}\right) \cdot x^{j} \quad(\bmod p)
≡i=0∑s(si)⋅xi⋅p⋅j=0∑q(qj)⋅xj(modp)
所以得:
(
1
+
x
)
s
p
+
q
≡
∑
i
=
0
s
(
s
i
)
⋅
x
i
⋅
p
⋅
∑
j
=
0
q
(
q
j
)
⋅
x
j
(
m
o
d
p
)
(1+x)^{s p+q} \equiv \sum_{i=0}^{s}\left(\begin{array}{l}s \\ i\end{array}\right) \cdot x^{i \cdot p} \cdot \sum_{j=0}^{q}\left(\begin{array}{l}q \\ j\end{array}\right) \cdot x^{j}(\bmod p)
(1+x)sp+q≡i=0∑s(si)⋅xi⋅p⋅j=0∑q(qj)⋅xj(modp)
3.1.3 例题
todo