本是几个月前整理完备hash构造时打算写的,不意拖到了金庸先生去世。《射雕英雄传》中那一次精彩绝伦的数学启蒙,不亚于光明顶上张无忌出尽风头的擂台秀。瑛姑与黄蓉的几轮口头交锋,涵盖了n阶幻方,多元方程,级数以及数论等多个方面的经典问题。童稚时也许你和我一样背过“二四为肩,六八为足……”,是不是钦佩金庸先生一丝不苟的装逼与博学,中学时候你有没有觉得黄蓉说她和老爹能解地元到天元19次的方程有点吹牛逼。大学学计算机的同学不知道有没有人与我一样惊喜,黄蓉口中的“一道老题”又一次进了课本,在信息领域仍有广泛的应用,例如完备hash构造。

瑛姑顿了顿,说道:“这第三道题呢,说易是十分容易,说难却又难到极处。今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?我知道这是二十三,不过那是硬凑出来的,要列一个每数皆可通用的算式,却是想破了脑袋也想不出。”

黄蓉笑道:“这容易得紧。以三三数之,馀数乘以七十;五五数之,馀数乘以二十一;七七数之,馀数乘十五。三者相加,如不大于一百零五,即为答数;否则须减去一百零五或其倍数。”瑛姑在心中盘算了一遍,果然丝毫不错,低声记诵道:“三三数之,馀数乘以七十;五五数之……”黄蓉道:“也不用这般硬记,我念一首诗给你听,那就容易记了:三人同行七十稀,五树梅花一枝,七子团圆正半月,馀百零五便得知。”

这个题在不同地方用的题面不一样,有用韩信点兵为题面的,也有如上这样直接问有物不知其数……

涉及到的一条数论定理也有不同叫法,有的叫“孙子定理”的也有叫“中国剩余定理”的

我们先把原问题明确一遍

求x使得:

写成同余方程组的形式就是

瑛姑的方法很暴力,谓之“硬凑”,虽然效率不高却是最容易编程实现的,暴力循环即可。

再来看一下黄蓉的答案是怎么操作的

三三数之,馀数乘以七十;

五五数之,馀数乘以二十一;

七七数之,馀数乘十五;

三者相加,如不大于一百零五,即为答数;否则须减去一百零五或其倍数。

用式子表示就是

那么这样操作为什么有效呢,虽然会背“三人同行七十稀”,这首诗为啥能行呢。

我们知道1053,57的公倍数,如果x符合要求,那么x加上若干个105也是问题的解,对105取模只是为了得到最小的解。那么我们来看一下y=2*70+3*21+2*15是不是问题的解。

考虑第一个除项3,我们发现2*70 mod 3 = 2,而(3*21+2*15)可以看成一个整体,是被3整除的,无疑2*70+(3*21+2*15)mod 3 = 2,符合要求。对于第二个除项5,3*21 mod 5 = 3,而(2*70+2*15)5整除,3*21+(2*70+2*15)mod 5 = 2,也是符合要求的。对于第三个除项7也是同理。

通过分析黄蓉给出的操作流程,我们可以总结出一个构造一元线性同余方程组的解的套路。就是已知m1,m2,m3是两两互质的正整数,求最小的正整数x,使它被m1,m2,m3除所得的余数分别为c1,c2,c3。求解思路就是我构造一个

其中M1应该是一个能被m2和m3整除的数,并且满足

我们发现第一句诗“三三数之,馀数乘以七十”得到的2*70=140显然不是最小的M1,更小的M1是35,可以通过拿最小公倍数105辗转相除观察余数得到,即

如果辗转相除最后余数不等于c1,那就把被除数扩大一下使它符合要求。例如黄蓉用70,被3除余1,那就把70扩大2倍用140。

中国剩余定理的完整表述可以在百科看到

而将中国剩余定理引入信息领域,用来构造完备hash,比较早的有台湾的张真诚,他在1984年写了一篇《The study of an ordered minimal perfect hashing scheme》。他与金庸一样能将老祖宗的智慧在新的领域以新的形式激活,作为华人深为之圈粉。

小议中国剩余定理兼怀金庸相关推荐

  1. 泡妞技术帖:一物降一物 金庸爷爷教你如何谈恋爱

    就金庸大侠的小说来讲,对于女性人物塑造是武侠小说里面最成功的(没有之一),甚至许多言情小说都比不上(比如琼瑶奶奶),不管是适用面还是真实性上来讲,基本可以涵盖你日常生活能接触到的人了.so,下面开讲. ...

  2. 从金庸的武侠到数学的江湖

     逝人已去,用这篇文章以作纪念!  金庸的武侠, 写的不光是武侠的世界, 还满含着生活的感悟.教育是生活中重要的一个部分,成了小说绕不开的主题. 我们先来看看金老先生对功夫习得的几个境界: 1. 勤习 ...

  3. 名人谈酒:李白、曹操、杜甫、金庸是这样评价酒的!

    酒,能忘忧. 酒能消忧解愁,忘却生死利禄及荣辱,让人游乎四海之外,能给我们带来自由的欢乐. 图 李煜说:醉乡路稳宜频到,此外不堪行. 曹操说:何以解忧,唯有杜康. 李白说:五花马,千金裘,呼儿将出换美 ...

  4. 金庸笔下武功最强的十人

    说明:没出过手的不算,而且每本书所处背景的武学程度不同,一般来说是朝代越往后武功越低,由此有资格参选的书有<射雕>三部曲,<天龙八部>,<笑傲江湖>.高手的武功取其 ...

  5. 金庸小说《倚天》和《神雕》的关系隐晦微妙,中间缺失的八十年里,份量最重的就是郭襄的一生沉浮

    // 所有的技术,本人均拿  51kxd.com  这个本人的小网站来验证,欢迎大家访问 对许多金庸迷而言,郭襄可算是最受欢迎的女性角色了,且金庸的小说射雕三部曲中,倚天和神雕中间存留了将近80年间的 ...

  6. 世界上最会写爱情的人,其实是金庸

    开篇之前,鱼叔先贴一首<天龙八部>的主题曲 今天,娱乐圈一半的明星都在祝他生日. 这个人叫-- 金庸 大抵,有一半的演员,都演过他笔下的人物. 林志颖→段誉 黄晓明→杨过+韦小宝 胡歌→郭 ...

  7. [转贴]金庸的九家著名公司

    1.日月神教(<笑傲江湖>) 日月神教继承了明教的品牌,这条金庸未曾点明,但明眼人洞若观火:明 字拆为日.月.张无忌的明教被朱元璋窃取后,修成正果建立大明帝国,明教的另一半流落 民间而成为 ...

  8. 2008年攻读金庸武侠硕士研究生入学统一考试试题

    2008年攻读金庸武侠硕士研究生入学统一考试试题 满分:150分 时间:180分钟 一.单项选择题(每空1 分,共30分) 1. 张无忌和赵敏第一次相遇是在______. A.听香水榭B.琴韵小筑 C ...

  9. 金庸的小说人生(1)

    孔庆东 陈珺 吕小刚等 著 谁是读者最多的当代作家? 这个问题问过许多人,也许答案各异:但是不可避免的,一定有许多人会把票投给通俗小说,投给金庸. 三十一岁完成自己的第一本武侠小说,三十五岁创办自己的 ...

最新文章

  1. 如何在计算机配置里面设置隐藏c盘,玩转电脑组策略(指定运行程序/隐藏C盘)
  2. 都在说GPT-3和AlphaFold,2020没点别的AI技术突破了?
  3. 洛谷 P1343 地震逃生
  4. Appium 移动端自动化 - Android SDK的安装与配置,使用安卓SDK连接手机实例演示
  5. php ci cookie使用,CI框架实现cookie登陆的方法详解
  6. 06丨MongoDB基本操作
  7. GTK实现绘图功能(draw.c)
  8. 终于转了,写写人生学习规划
  9. oracle数据迁移过程中,把表中数据导出为txt文件的三种方法
  10. Catalyst 6000 family Architecture
  11. python之join()用法
  12. Springboot集成SpringSecurity 附代码
  13. Java|二叉树基础详解
  14. KinectFusion
  15. 知识图谱关键技术及行业应用解读
  16. python你已经是个成熟的软件了_你已经是个成熟的系列表情包大全_支付宝微信等软件中招_软吧...
  17. java imageio temp_java-使用ImageIO.write jpg文件时出现问题:粉红色背景
  18. 如花搞笑图片集锦(转贴)
  19. 一、highcarts简介
  20. 中国的大学里垮掉的一代---武大校长的一封信

热门文章

  1. 数据结构及计算机网络
  2. linux软件 心愿
  3. 保存计算过程的计算器Java实现
  4. 鸿蒙磅礴不可以涯际夕,一尺树根不出土,凿臼舂米于道左兮,行人为叹生涯悭。...
  5. 分布式事务与Seate框架:分布式事务理论
  6. PhpStorm 2021 如何配置php7.3的环境
  7. CPU 编译器 C 语言 操作系统 程序的关系
  8. ZZULIOJ1056-1060Python解法
  9. 配置了单机启动(standalone),也配置了数据库,但是Nacos依然启动失败
  10. 嵌入式linux运行dosbox,Ubuntu18.04/Linux下安装DosBox进行8086汇编