由倒水问题引发出来的对于模线性方程与二元不定方程的思考

来源:互联网 发布:起点是网络出版社吗 编辑:程序博客网 时间:2024/05/16 01:15

今天下课的时候,拿同学手机玩了会游戏,不过很巧,玩的是个倒水的游戏。具体是这样的,相信大家肯定都玩过:

给你两个已知容量的杯子,然后要求在某个杯子中得出指定容量的水。


1、两个杯子分别为7L和4L,然后要倒出一升的水:

求解这样的问题,其实就是求解二元不定方程:

7x+4y = 1

很容易解得 x = -1, y = 2。因为7和4互质,gcd(7,4) = 1,然后再用扩展欧几里得算法就可得到解,当然通解为:

x = -1+4t , y = 2-7t


2、让我们在把题目稍微改改,同样是7L和4L,不过要求倒出c升的水(c为正整数):

对7x+4y = 1,我们可以变形为 7cx + 4cy = c,所以得到的x,y的解乘以c即可


于此,我想到了模线性方程 ax ≡ b (mod n),其实我们可以很容易的发现二元不定方程与模线性方程之间的关系,实际上,模线性方程就是引入了modn的等价类,从而把二元不定方程的解控制在了n的范围内,这是很具有实际意义的,在算法中,我们可以利用周期性从而进行剪枝。

ax ≡ b (mod n) 等价于 ax + ny = b

同样ax + ny = b 等价于ax ≡ b (mod n),也等价于nx ≡ b (mod a),而我们在实际处理一个不定方程的时候,应该选取a还是n来做模数呢?我觉得这是有区别的,假设a > n,那么,当我们选取n作为模数时,可以将 x, y的解控制在n内,从而减小了查找的数据量,所以个人建议选取较小的一个数作为模数。


4、这里我又看到了一个非常有趣的推论:方程ax ≡ b (mod n)或者对模n有d个不同的解,其中d=gcd(a, n) ,或者无解。

对于这个定理,我们可以这么看,对于mod n 来说,如果该方程有解,并且我们把这个方程看成是(Zn, *n )的一个群,那么a就可以构成一个子群,a也就是该子群的一个生成元,并且满足拉格朗日定理:即子群的阶是原群阶的约数,这里原群的阶就是n,子群的阶就是d。

当子群的阶为1的时候,即d为1时,即a和n互质,那么,对于该方程ax ≡ b (mod n)在mod n下必然就只有一个解。因为如果 x' 为mod n下的一个解,那么就有通解:x = x' + nt ,易得在mod n下必然只有一个解。

当子群的阶不为1时,那么我们首先同除以d,转化为 1 的情况,这里也就相当于对于一个长度为n的区间,分成了d段,然后对于通解 x = x' + nt,自然也就有了d个解。


从这里可以看出模线性方程与二元不定方程是有着很大的关系的,并且在两个方程之中,两个系数互质(即模线性方程中的a和n,以及二元不定方程中的a和b)非常重要。对于很多定理以及推论的理解有着很大的帮助。






原创粉丝点击