现有两个水杯,容量分别为 m m m ml和 n n n ml,想要量出 t t t ml水,该如何称量?
该问题可直接形式化为
找到
k
1
k_1
k1和
k
2
k_2
k2(
k
1
,
k
2
∈
N
+
k_1,k_2\in \mathbb{N_+}
k1,k2∈N+) 使得
m
⋅
k
1
−
n
⋅
k
2
=
t
m\cdot k_1-n\cdot k_2 = t
m⋅k1−n⋅k2=t
显然对于一组特解
{
x
0
=
k
1
y
0
=
k
2
\left\{ \begin{aligned} x_0 & = & k_1 \\ y_0 & = & k_2 \\ \end{aligned} \right.
{x0y0==k1k2
具体操作为不断的装满容量为
m
m
m 的水杯,并将其倒入容量为
n
n
n的水杯,容量为
n
n
n的水杯一旦装满,便将其全部倒掉,当装入到第
k
1
k_1
k1杯 容量为
m
m
m的水杯时,将其倒入容量为
n
n
n的杯子直至装满,此时容量为
m
m
m的水杯恰好剩下
t
t
t ml水。
此问题要有解,显然必须
t
t
t是
m
,
n
m,n
m,n的最大公约数的倍数,即
g
c
d
(
m
,
n
)
∣
t
gcd(m,n)|t
gcd(m,n)∣t,而方程
m
⋅
x
+
n
⋅
y
=
g
c
d
(
m
,
n
)
m\cdot x+n\cdot y=gcd(m,n)
m⋅x+n⋅y=gcd(m,n)
一定有解。
如果
g
c
d
(
n
,
x
)
=
1
gcd(n,x)=1
gcd(n,x)=1,根据欧拉定理有
x
φ
(
n
)
≡
1
m
o
d
(
n
)
x^{\varphi(n)}\equiv1\mod(n)
xφ(n)≡1mod(n)
所以有
x
φ
(
n
)
−
1
⋅
x
≡
1
m
o
d
(
n
)
x^{\varphi(n)-1}\cdot x\equiv1\mod(n)
xφ(n)−1⋅x≡1mod(n)
因此
x
x
x模
n
n
n下的乘法逆元
x
−
1
x^{-1}
x−1为
x
−
1
=
x
φ
(
n
)
−
1
m
o
d
(
n
)
x^{-1}=x^{\varphi(n)-1}\mod(n)
x−1=xφ(n)−1mod(n)
求出逆元后,便可以直接求得
k
1
,
k
2
k_1,k_2
k1,k2。
例子:现有两个水杯分别为5ml和4ml,如何量出3ml?
即求出
k
1
,
k
2
k_1,k_2
k1,k2使得
5
⋅
k
1
−
3
⋅
k
2
=
4
5\cdot k_1-3\cdot k_2=4
5⋅k1−3⋅k2=4
因为
φ
(
3
)
=
2
\varphi(3)=2
φ(3)=2,所以
5
−
1
m
o
d
(
3
)
=
5
φ
(
3
)
−
1
m
o
d
(
3
)
=
2
5^{-1}\mod(3)=5^{\varphi(3)-1}\mod (3)=2
5−1mod(3)=5φ(3)−1mod(3)=2,于是有
5
⋅
2
−
3
⋅
3
=
1
5\cdot2-3\cdot3=1
5⋅2−3⋅3=1
两边乘以
t
=
4
t=4
t=4有
5
⋅
(
2
⋅
4
)
−
3
⋅
(
3
⋅
4
)
=
4
5\cdot(2\cdot4)-3\cdot(3\cdot4)=4
5⋅(2⋅4)−3⋅(3⋅4)=4
另外可以约掉公共部分
5
⋅
3
⋅
2
5\cdot3\cdot2
5⋅3⋅2
(
5
⋅
(
2
⋅
4
)
−
5
⋅
3
⋅
2
)
−
(
3
⋅
(
3
⋅
4
)
−
5
⋅
3
⋅
2
)
=
4
(5\cdot(2\cdot4)-5\cdot3\cdot2)-(3\cdot(3\cdot4)-5\cdot3\cdot2)=4
(5⋅(2⋅4)−5⋅3⋅2)−(3⋅(3⋅4)−5⋅3⋅2)=4
即
5
⋅
(
2
⋅
4
−
3
⋅
2
)
−
3
⋅
(
3
⋅
4
−
5
⋅
2
)
=
4
5\cdot(2\cdot4-3\cdot2)-3\cdot(3\cdot4-5\cdot2)=4
5⋅(2⋅4−3⋅2)−3⋅(3⋅4−5⋅2)=4
最后化简为
5
⋅
2
−
3
⋅
2
=
4
5\cdot2-3\cdot2=4
5⋅2−3⋅2=4
即每次装满5ml的水杯,并倒入3ml的水杯,3ml一旦装满,便倒掉,当装满第二杯5ml的水杯时,并将3ml装满时,5ml水杯便剩下4ml