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


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

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


    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)非常重要。对于很多定理以及推论的理解有着很大的帮助。






  • 相关阅读:
    settTimeout vs setInterval
    JS继承
    JS创建对象
    原型链
    开始学习python的感受
    Problem 29
    Python 查看关键字
    Problem 21
    Problem 34
    Problem 42
  • 原文地址:https://www.cnblogs.com/pangblog/p/3301579.html
Copyright © 2020-2023  润新知