博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
由倒水问题引发出来的对于模线性方程与二元不定方程的思考
阅读量:7119 次
发布时间:2019-06-28

本文共 1153 字,大约阅读时间需要 3 分钟。

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

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

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

 

转载地址:http://eliel.baihongyu.com/

你可能感兴趣的文章
【转】C盘不能扩展卷怎么回事 C盘扩展卷灰色的解决办法
查看>>
iOS性能优化专题
查看>>
在Linux中查看正在运行哪些process,杀掉一批名字相同的process
查看>>
快学Scala习题解答—第四章 映射和元组
查看>>
JQuery的ajaxFileUpload的使用
查看>>
dva/dynamic
查看>>
Intelli IDEA快捷键(配合IdeaVim)
查看>>
Redis简单案例(二) 网站最近的访问用户
查看>>
数据库历险记(三) | 缓存框架的连环炮
查看>>
CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
查看>>
Eclipse创建一个JAVA WEB项目
查看>>
【CLR】解析CLR的托管堆和垃圾回收
查看>>
一、K3 WISE 实施顾问教程《进度1-谈谈实施顾问》
查看>>
numpy 中的axis轴问题
查看>>
『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理
查看>>
Hibernate延迟加载策略
查看>>
vim学习、各类插件配置与安装【转】
查看>>
sql server 索引阐述系列五 索引参数与碎片
查看>>
一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for ...
查看>>
欠拟合怎么解决
查看>>