第十二夜 · 一个数学学渣,用计算机解奥数题前几天,一位读者在微信上给我留言,说,我感觉你的数学也很厉害。我盯着这句话看了很久。放在从前,我大概会客气两句,说不敢不敢。可这一回,我想坦白得彻底一些。我是一个数学学渣。这四个字不是我谦虚,是有根据的。四岁那年,数学是一首儿歌。一像蜡笔,二像小鸭,三像耳朵,0 像鸡蛋,小朋友们快来看,数学与你把手牵。那时它是我最喜欢的画。小学五年级,数学 98 分。可就是那一年,爱的裂痕开始了。分数没有垮,快乐先垮了。初一下学期期末统考,59 分,一分之差不及格,我第一次为数学落泪。初三的寒假,我和外婆在台灯下挑灯苦战几何。一张张草图,一行行等式,最后也没能填平那条鸿沟。中考,123 分,是代数换来的。中考结束的那个暑假,我偶然读到一本《从一到无穷大》,然后在日记里写下一句话,从勾股定理到杨辉三角,从幻方到数独,从鸡兔同笼到韩信点兵。那时我不知道,这句话里藏着后来两夜的题目。高三,立体几何单元考,29 分。我向数学宣战。高考数学,98 分,满分 150。两个 98,隔着我的整个中学时代。第一个 98,是快乐的讣告。第二个 98,是战争的终战书。大学高数,作业本上一个又一个 100 分。我看着那些一百分想,原来你没变,变的是我自己。2020 年,考研成绩公布,总分 248,数学特别低,过线无望。我报考的那所学校,是外婆读过师范的那所学校。那一场考试,死在数学上。把这些分数一笔一笔列出来,像不像一份屈辱史年表?我原本以为写完会崩。写完发现,它们排成一列之后,反而安静了。年表里有两封信。2017 年 5 月,大学高数快结课时,我写过一封告别信,信的结尾是谈判。我对高等数学说,我们还是分手吧,你有你的高深,我一辈子无法企及。它说,好,那我们考研时再见。2019 年 12 月,考研结束当天,我又给它写了一封信,这回是告白。我在信里说,既然无法用理性的智慧穷尽你的世界,那么我就用感性的眼光去了解你。信的落款是八个字,你所看不起的学渣。2020 年 2 月,回执来了,我给它起名叫《经历过风雨,未必见彩虹》。总分 248,数学没有过线。信里有句话我抄在这里,有时候 100 句励志的宣言,抵不过一个冷冰冰的分数。还有一句更疼的,发现了那个一度曾经让我厌恶的数学学科,背后难以言说的美丽。虽然那份美丽我无法理解和超越。无法理解和超越。这七个字,我背了六年。后来的一年里,我读苏东坡,读陆游,读回首向来萧瑟处,也无风雨也无晴。再后来,我成了一名软件工程师。再再后来,我开始写这本夜话,逐夜把算法讲成故事。写到现在,第十一夜讲完了韩信点兵,我忽然停下来,发现了两件事。我数了数,从四岁那首儿歌算起,数学在我心里住了近30年。考场上它陪了我十年,心里的这近30年,它一天都没有离开过。我写了三封告别信,2017 一封,2019 一封,高考后还有一首十不见的诗。可数学一封都没有回过再见。另外还有一件是我发现写了这么多夜,我还在用算法解奥数题。扑克牌,汉诺塔,蜗牛爬井,韩信点兵。难道计算机真的只能做奥数题吗?我把这个问题也拿去问了 AI。它没有安慰我,它给我讲了一个词的身世。computer,计算机,这个词 1613 年第一次出现在印刷品里,本义不是机器,是人,是受雇做计算的人。天文台里成排坐着算星表的,叫 computer;曼哈顿计划里算弹道的,也叫 computer。数学史上,执行这一环本来就外包出去,先外包给人肉,1936 年之后,图灵把它外包给了机器。所以一个工程师用计算机解数学题,不是自我补偿,是回到了这门学科本来的分工,人负责提问和判断,机器负责执行。学渣当年输掉的,从来不是思想,是执行的流畅度,而考试偏偏只考执行。我说,可我总疑心,这种飞起的感觉是你的幻觉,是你在增强我的能力。它说,你的怀疑有一半是真的。纸笔推积分的能力没有回来,永远不会回来。剩下的一半,用判据验,幻觉的特征是撤掉源头就消失。把 AI 撤走,那些 Java 文件还在硬盘上,javac 一跑,答案照样出来。撤不掉的就不是幻觉,是杠杆。杠杆不增加你的力气,但它撬动的重量是真的。我想了想,又抛给它一个问题。那这本书的边界呢?从头到尾都在解奥数题,计算机只能做奥数题吗?它说,有一个四百年前的同行可以回答你。1592 年,明代程大位写了一本书,叫《算法统宗》,将近六百道题,全是百僧分馍这个量级的小题,没有一道工业算法。可它畅销三百年,东传日本,喂饱了整个东亚的商业数学。小题不是罪,小题是思想的最小样本。工业算法是同一批思想加上工程约束的放大版,不是另一门宗教。我服了。因为《算法统宗》这四个字里,藏着的正是我这本书想做的事。他用珠算口诀包装数学,给明代的商贾。我用故事包装算法,给今天的初学者。我们隔了430年,写的是同一类书。话说回来了。学渣解奥数题,到底怎么解?拿一道祖传的题当例子。孙子算经卷下第三十一题,今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何。鸡兔同笼,奥数启蒙的第一座大山,我当年就是在这座山下第一次学会自卑的。标准的学霸走法叫假设法,假设全是鸡,脚会少算多少,再用差值除回来。这步很聪明,聪明到我当时怎么也想不通,为什么假设全是鸡之后,多出来的脚就该分给兔子。学渣的走法没有这么聪明,只有一条,把所有可能都试一遍。笼子里一共 35 个头,那么鸡的数量只可能在 0 到 35 之间。一种一种试。鸡 0 只兔 35 只,脚 140,多了。鸡 1 只兔 34 只,脚 138,还多。一路试下去,试到第 24 种可能的时候,脚正好 94。publicclassNight12ChickenRabbit{// 孙子算经卷下原题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何。// 学霸的走法是假设法,一步到位;学渣的走法是枚举,// 把每一种「有多少只鸡」的可能性全部试一遍,机器一眨眼,诚实得像小学生。publicstaticvoidmain(String[] args){intheads=35;intfeet=94;for(intchicken=0; chicken <= heads; chicken++) {intrabbit=heads - chicken;// 头数钉死兔数,院墙同款if(2* chicken +4* rabbit == feet) { System.out.println("雉 "+ chicken +" 只,兔 "+ rabbit +" 只"); } } System.out.println("验足:"+ (2*23+4*12)); } }雉 23 只,兔 12 只。顺便说一句,这道题和第十一夜的物不知数出自同一本书,《孙子算经》,一家出的两道题,一道给了中国剩余定理,一道给了奥数启蒙。而枚举这个笨办法,从第六夜的蜗牛爬井一路用到今夜,从没让我失望过。它不聪明,但它诚实。聪明是压缩的,一步到位;枚举是展开的,一步不省。机器不怕展开,一秒钟展开一万步。所以学渣拿到计算机,等于拿到了一台把笨办法的执行效率放大一万倍的机器。还有一个旧伤,也要在这一夜做了结。高二下学期刚学立体几何的时候,我不会画正方体的透视图。当高中老师在黑板上画出一整个空间坐标系的时候,我的感觉是,一个平面直角坐标系被棍子捅穿了。因为我看不到三维,我只能看到二维。右边的正方体,在你眼里是一个有深度的立体。在我眼里,它只有一个正面,一个方方正正的正方形。后来我父亲从医院带来废弃的 X 光片,半透明的胶片,他用牙签扎了一个小长方体,让我拿在手里真实地旋转,看里面真实的棱。可我还是看不见那条穿越整个正方体的体对角线。因为牙签插不进去,插进去就穿了。那道立体几何我考了 29 分。宣战,惨败,梦魇。这个故事听起来像是一个空间想象力弱到极致的人的不甘,其实不是。多年之后我才发现,我的病因精确得可以写进病历,我看不到三维,不是脑子里缺一根弦,是黑板上缺一个维度。黑板是静态的,无法旋转,无法闪烁。二维的纸装不下三维的真理,这不是我的错,是媒介的错。那么媒介变了之后呢?后来我在计算机里,给一个棱长为 2 的正方体切下角上的四个点,输入坐标,A 是原点,B、C、D 分别在三根轴上。三个向量一列,行列式一展开,取绝对值除以 6,体积就出来了。四分之三。当年在黑板上辅助线画到崩溃的那道题,屏幕上一行代码,完事。publicclassNight12Volume{// 高三立体几何的旧伤,用向量偿还。// 棱长 2 的正方体,从一个角切下来的三棱锥:// A(0,0,0) B(2,0,0) C(0,2,0) D(0,0,2),求四面体 ABCD 的体积。// 当年在黑板上辅助线画到崩溃,如今三个向量、一个行列式,六分之一的事。staticdoubledet(double[] u,double[] v,double[] w){returnu[0] * (v[1] * w[2] - v[2] * w[1]) - u[1] * (v[0] * w[2] - v[2] * w[0]) + u[2] * (v[0] * w[1] - v[1] * w[0]); }publicstaticvoidmain(String[] args){double[]A={0,0,0};double[]B={2,0,0};double[]C={0,2,0};double[]D={0,0,2};double[]AB={B[0] - A[0], B[1] - A[1], B[2] - A[2]};double[]AC={C[0] - A[0], C[1] - A[1], C[2] - A[2]};double[]AD={D[0] - A[0], D[1] - A[1], D[2] - A[2]};doublev=Math.abs(det(AB, AC, AD)) /6.0; System.out.println("四面体体积 = "+ v +"(正方体体积 8 的 "+ (v /8.0) +")"); System.out.println("辅助线:零条。旋转:无限次。闪烁:每一次调试。"); } }向量法不需要辅助线,它只需要三个箭头。从 A 出发,指向 B、C、D,三个向量一列,行列式一展开,绝对值除以 6,体积自己走出来。这套章法也不挑图,正方体也好,歪四面体也好,坐标一换,章法照旧。立体几何从此不再需要你在脑子里旋转纸,需要旋转的时候,屏幕替你转,无限次。辅助线,零条。旋转,无限次。闪烁,每一次调试。黑板是静态的,无法旋转,无法闪烁。屏幕可以。数学没有变,难也没有变,变的是媒介。当年装不下的浪漫,屏幕装得下。这一夜还剩最后一笔,要跟一个传说清算。你可能听过这个故事。1650 年前后,52 岁的笛卡尔流落斯德哥尔摩,在街头偶遇 18 岁的公主克里斯汀,被国王召进宫当她的数学教师。师生相恋,国王震怒,放逐笛卡尔。分别之际,他寄出最后一封信,通篇没有一个字,只有一行公式,r 等于 a 乘以 1 减 sinθ。满朝文武无人能解,公主在坐标纸上把它画了出来。一颗心。先照实说,这个故事是编的,无任何史料。真实的笛卡尔 1649 年确实去了斯德哥尔摩,学生是 32 岁的瑞典女王克里斯蒂娜,次年冬天他死于肺炎。没有第十三封信,没有公主。和物不知数一样,传说都是编的。可是这条曲线是真的。$r=a(1-\sin\theta)$,画出来是一个圆瓣加一个尖,学名心形线。我在 2019 年的那封告白里写过它,说它诉说着笛卡尔和公主的爱情故事。今年,我用 Java 把它真画了出来,旁边摆上我自己用字符排的另一颗心。左边是 for 循环唱的歌,右边是公式画的线。传说里它是心。画出来,你自己看,像什么?像猴子屁股。而猴子屁股,本来就是心形的。编的浪漫传了百年,真的公式喂过齿轮,也养过屁股。可猴子屁股本来就是心形的,所以编的也没白编。这一段你要是笑了,那就对了。数学的笑话讲到最后,从来都是温柔的。故事讲完,还剩一个真正的彩蛋。有人不满足于心形线的单瓣,用两个函数拼出了一颗更标准的心。上半,$f(x)=\sqrt{1-(|x|-1)^2}$,两个圆瓣。下半,$g(x)=\arccos(1-|x|)-\pi$,一个尖底。f 画上半,g 画下半。我盯着这幅图看了很久,然后想起了自己在 2021 年的一篇演讲里写下的话,理性的思维可以让人看见睿智的天空,感性的心灵却能让人触摸温情的世界。原来那句话,早就是这对函数的人话版本。理性画看得见的上半,感性画藏起来的下半,缺了谁,这颗心都拼不完整。李白的数学是无穷与连续,飞流直下三千尺;杜甫的算法是有限与离散,语不惊人死不休。他们两个人一辈子只见过几面,可后人说,李杜文章在,光焰万丈长。数学和算法也是这样,一个负责提出无穷的问题,一个负责给出有限的答案。我的这本夜话,就摆在他们的桌子边上,每一夜,都是一次李杜同框。所以,回到那位读者的留言。你的数学很厉害。谢谢。但我想把实话原样交回。我的数学至今很差,纸笔推积分还是不会,限时心算还是不行。真实的图景是这样,我外包了执行,保留了提问和判断,然后把余生的每一夜,都用来偿还当年欠下的那道题。补偿是真的。可补偿不丢人。数学缺的从来不是手,是敢提问的人。三封告别信都是我写的。而这一夜,是数学的回信。它说,你从没离开,我也从没离开。分数只陪了你十年,我陪了你一生。下一夜,还讲我的故事吗?讲。一直都讲。packagepoem;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassPoem{publicstaticvoidmain(String[] args){DatespecialTime=newDate(121,2,15); reunion(specialTime); neverForget("teacher's love"); walkToHeartAgain(); neverSayGoodbye(); loveForever(); drawHeart(); System.out.println("\t\t\t\t\t\t"+"秋天的怀念"); }publicstaticvoidreunion(Date specialTime){DateFormatdf=newSimpleDateFormat("YYYY-MM-dd");Stringformat=df.format(specialTime); System.out.println("\t\t\t"+format +"特别的日子"); System.out.println("\t\t\t"+"重逢于照亮哈佛红的那抹夕阳"); }publicstaticvoidneverForget(String love){ System.out.println("\t\t\t"+"师恩绵长犹未忘"); }publicstaticvoidwalkToHeartAgain(){ System.out.println("\t\t\t"+"再一次走进你温暖的心房"); }publicstaticvoidneverSayGoodbye(){ System.out.println("\t\t\t"+"这一次,不说再见"); }publicstaticvoidloveForever(){intendTime=Integer.MAX_VALUE -1;while(endTime < Integer.MAX_VALUE) { System.out.println("\t\t\t"+"重逢的这一秒便是我们的永恒"); endTime++; } }publicstaticvoiddrawHeart(){for(inti=0, k =0; i <14; i++) {if(i <3) {for(intj=0; j <5-2* i; j++) { System.out.print(" "); }if(i ==2) {for(intj=0; j <6+4* i -1; j++) { System.out.print("母"); }for(intj=0; j <7-4* i +2; j++) { System.out.print(" "); }for(intj=0; j <6+4* i -1; j++) { System.out.print("校"); } }else{for(intj=0; j <6+4* i; j++) { System.out.print("我"); }for(intj=0; j <7-4* i; j++) { System.out.print(" "); }for(intj=0; j <6+4* i; j++) { System.out.print("爱"); } } }elseif(i <6) {for(intj=0; j <29; j++) { System.out.print("的"); } }else{if(i ==13) {for(intj=0; j <2* (i -6); j++) { System.out.print(" "); } System.out.print("!"); }else{for(intj=0; j <2* (i -6) +1; j++) { System.out.print(" "); }for(intj=1; j <28-4* k; j++) { System.out.print("美"); } k++; } } System.out.println(); } } }① 真伪核对逐条照实登记。Ⅰ 分数年表 五年级 98 分、初一下学期期末统考 59 分、中考 123 分、高三立体几何单元考 29 分、高考数学 98 分(满分 150)、2020 考研总分 248 且数学未过线、大学高数作业连续满分,均为 秋天的怀念 亲历自述,以本人历年日记为据(真)。外婆曾在师范学校任教、考研报考动机与其相关(真)。Ⅱ 三封信与演讲 2017-05-11《我与数学的爱恨情仇》、2019-12-23《对数学的告白》(署名你所看不起的学渣)、2020-02-21《经历过风雨,未必见彩虹》、2021-10-08《梦想之途,一路阳光》,均为 秋天的怀念 原文存档,本夜引文照录,个别错字径改(真,已披露)。Ⅲ computer 词源 该词 1613 年首见于印刷品(Richard Braithwaite,The Yong Mans Gleanings),本义为做计算的人;二十世纪前 computer 是人类职业,天文台与科研机构雇人专职计算(真)。Ⅳ algorithm 词源 源自花拉子米(al-Khwarizmi)之拉丁化,第九世纪,比程大位早七百年(真,第十一夜已核)。Ⅴ 雉兔同笼 《孙子算经》卷下第三十一题,三十五头九十四足,答雉二十三兔十二(真,实跑验证);与物不知数同出《孙子算经》(真)。Ⅵ 四面体体积 混合积绝对值除以六,棱长 2 正方体一角的三棱锥体积为 4/3,占正方体 1/6(真,实跑验证)。Ⅶ 心形线与传说 r=a(1−sinθ) 为真实曲线,学名心形线(cardioid),1674 年 Rømer 于齿轮研究中使用,1741 年 de Castillon 命名(真);笛卡尔与公主的第十三封信无任何史料,属网络传说(传说);现代分段函数真心 f、g 为 Desmos 时代流行图式,原创者不可考(真)。Ⅷ Poem.java 秋天的怀念 2021 年原作,字符心藏头我爱母校的美(真,脱敏定稿);恒久循环因 int 溢出,永恒恰好只打印一次(真,bug 即诗)。Ⅸ 口述录入手脚 外婆口述、立体几何口述、X 光片段均为原样收录,其中对角线的量词按机审规范作了调整(已披露);AI 对话场景为叙事演绎,对话内容即本夜数学事实(演绎)。Ⅹ 实跑记录 JDK 21。鸡兔同笼枚举得雉 23 兔 12,验足 94;四面体体积 1.3333 即 4/3;Poem.java 输出 2021-03-15 心形一幅,藏头完整。② 今夜习题三道,评论区见。Ⅰ 今有龟鹤同池,上有四十头,下有一百一十二足,问龟鹤各几何。枚举一遍,再想想假设法省掉了什么。Ⅱ 把第十二夜那颗四面体的正方体棱长改成 3,重算角上三棱锥的体积。看看它占正方体的比例,变没变。Ⅲ 幻觉检测。把 AI 撤走,列出你的哪三样成果还站得住。这道题没有标准答案,但有唯一要求,证据必须不经过任何人的嘴。本书目录导航上一篇:第十一夜 韩信点兵 下一篇:第十三夜 幻方,武侠世界里的数学迷宫 起点:卷首语·算法童话版权声明:本文为作者原创,受著作权法保护。未经授权禁止转载、搬运、摘编、改编及任何形式的二次创作;个人学习引用请注明作者与原文出处。转载授权请联系作者(CSDN 私信)。侵权必究。
第十二夜 · 一个数学学渣,用计算机解奥数题前几天,一位读者在微信上给我留言,说,我感觉你的数学也很厉害。我盯着这句话看了很久。放在从前,我大概会客气两句,说不敢不敢。可这一回,我想坦白得彻底一些。我是一个数学学渣。这四个字不是我谦虚,是有根据的。四岁那年,数学是一首儿歌。一像蜡笔,二像小鸭,三像耳朵,0 像鸡蛋,小朋友们快来看,数学与你把手牵。那时它是我最喜欢的画。小学五年级,数学 98 分。可就是那一年,爱的裂痕开始了。分数没有垮,快乐先垮了。初一下学期期末统考,59 分,一分之差不及格,我第一次为数学落泪。初三的寒假,我和外婆在台灯下挑灯苦战几何。一张张草图,一行行等式,最后也没能填平那条鸿沟。中考,123 分,是代数换来的。中考结束的那个暑假,我偶然读到一本《从一到无穷大》,然后在日记里写下一句话,从勾股定理到杨辉三角,从幻方到数独,从鸡兔同笼到韩信点兵。那时我不知道,这句话里藏着后来两夜的题目。高三,立体几何单元考,29 分。我向数学宣战。高考数学,98 分,满分 150。两个 98,隔着我的整个中学时代。第一个 98,是快乐的讣告。第二个 98,是战争的终战书。大学高数,作业本上一个又一个 100 分。我看着那些一百分想,原来你没变,变的是我自己。2020 年,考研成绩公布,总分 248,数学特别低,过线无望。我报考的那所学校,是外婆读过师范的那所学校。那一场考试,死在数学上。把这些分数一笔一笔列出来,像不像一份屈辱史年表?我原本以为写完会崩。写完发现,它们排成一列之后,反而安静了。年表里有两封信。2017 年 5 月,大学高数快结课时,我写过一封告别信,信的结尾是谈判。我对高等数学说,我们还是分手吧,你有你的高深,我一辈子无法企及。它说,好,那我们考研时再见。2019 年 12 月,考研结束当天,我又给它写了一封信,这回是告白。我在信里说,既然无法用理性的智慧穷尽你的世界,那么我就用感性的眼光去了解你。信的落款是八个字,你所看不起的学渣。2020 年 2 月,回执来了,我给它起名叫《经历过风雨,未必见彩虹》。总分 248,数学没有过线。信里有句话我抄在这里,有时候 100 句励志的宣言,抵不过一个冷冰冰的分数。还有一句更疼的,发现了那个一度曾经让我厌恶的数学学科,背后难以言说的美丽。虽然那份美丽我无法理解和超越。无法理解和超越。这七个字,我背了六年。后来的一年里,我读苏东坡,读陆游,读回首向来萧瑟处,也无风雨也无晴。再后来,我成了一名软件工程师。再再后来,我开始写这本夜话,逐夜把算法讲成故事。写到现在,第十一夜讲完了韩信点兵,我忽然停下来,发现了两件事。我数了数,从四岁那首儿歌算起,数学在我心里住了近30年。考场上它陪了我十年,心里的这近30年,它一天都没有离开过。我写了三封告别信,2017 一封,2019 一封,高考后还有一首十不见的诗。可数学一封都没有回过再见。另外还有一件是我发现写了这么多夜,我还在用算法解奥数题。扑克牌,汉诺塔,蜗牛爬井,韩信点兵。难道计算机真的只能做奥数题吗?我把这个问题也拿去问了 AI。它没有安慰我,它给我讲了一个词的身世。computer,计算机,这个词 1613 年第一次出现在印刷品里,本义不是机器,是人,是受雇做计算的人。天文台里成排坐着算星表的,叫 computer;曼哈顿计划里算弹道的,也叫 computer。数学史上,执行这一环本来就外包出去,先外包给人肉,1936 年之后,图灵把它外包给了机器。所以一个工程师用计算机解数学题,不是自我补偿,是回到了这门学科本来的分工,人负责提问和判断,机器负责执行。学渣当年输掉的,从来不是思想,是执行的流畅度,而考试偏偏只考执行。我说,可我总疑心,这种飞起的感觉是你的幻觉,是你在增强我的能力。它说,你的怀疑有一半是真的。纸笔推积分的能力没有回来,永远不会回来。剩下的一半,用判据验,幻觉的特征是撤掉源头就消失。把 AI 撤走,那些 Java 文件还在硬盘上,javac 一跑,答案照样出来。撤不掉的就不是幻觉,是杠杆。杠杆不增加你的力气,但它撬动的重量是真的。我想了想,又抛给它一个问题。那这本书的边界呢?从头到尾都在解奥数题,计算机只能做奥数题吗?它说,有一个四百年前的同行可以回答你。1592 年,明代程大位写了一本书,叫《算法统宗》,将近六百道题,全是百僧分馍这个量级的小题,没有一道工业算法。可它畅销三百年,东传日本,喂饱了整个东亚的商业数学。小题不是罪,小题是思想的最小样本。工业算法是同一批思想加上工程约束的放大版,不是另一门宗教。我服了。因为《算法统宗》这四个字里,藏着的正是我这本书想做的事。他用珠算口诀包装数学,给明代的商贾。我用故事包装算法,给今天的初学者。我们隔了430年,写的是同一类书。话说回来了。学渣解奥数题,到底怎么解?拿一道祖传的题当例子。孙子算经卷下第三十一题,今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何。鸡兔同笼,奥数启蒙的第一座大山,我当年就是在这座山下第一次学会自卑的。标准的学霸走法叫假设法,假设全是鸡,脚会少算多少,再用差值除回来。这步很聪明,聪明到我当时怎么也想不通,为什么假设全是鸡之后,多出来的脚就该分给兔子。学渣的走法没有这么聪明,只有一条,把所有可能都试一遍。笼子里一共 35 个头,那么鸡的数量只可能在 0 到 35 之间。一种一种试。鸡 0 只兔 35 只,脚 140,多了。鸡 1 只兔 34 只,脚 138,还多。一路试下去,试到第 24 种可能的时候,脚正好 94。publicclassNight12ChickenRabbit{// 孙子算经卷下原题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何。// 学霸的走法是假设法,一步到位;学渣的走法是枚举,// 把每一种「有多少只鸡」的可能性全部试一遍,机器一眨眼,诚实得像小学生。publicstaticvoidmain(String[] args){intheads=35;intfeet=94;for(intchicken=0; chicken <= heads; chicken++) {intrabbit=heads - chicken;// 头数钉死兔数,院墙同款if(2* chicken +4* rabbit == feet) { System.out.println("雉 "+ chicken +" 只,兔 "+ rabbit +" 只"); } } System.out.println("验足:"+ (2*23+4*12)); } }雉 23 只,兔 12 只。顺便说一句,这道题和第十一夜的物不知数出自同一本书,《孙子算经》,一家出的两道题,一道给了中国剩余定理,一道给了奥数启蒙。而枚举这个笨办法,从第六夜的蜗牛爬井一路用到今夜,从没让我失望过。它不聪明,但它诚实。聪明是压缩的,一步到位;枚举是展开的,一步不省。机器不怕展开,一秒钟展开一万步。所以学渣拿到计算机,等于拿到了一台把笨办法的执行效率放大一万倍的机器。还有一个旧伤,也要在这一夜做了结。高二下学期刚学立体几何的时候,我不会画正方体的透视图。当高中老师在黑板上画出一整个空间坐标系的时候,我的感觉是,一个平面直角坐标系被棍子捅穿了。因为我看不到三维,我只能看到二维。右边的正方体,在你眼里是一个有深度的立体。在我眼里,它只有一个正面,一个方方正正的正方形。后来我父亲从医院带来废弃的 X 光片,半透明的胶片,他用牙签扎了一个小长方体,让我拿在手里真实地旋转,看里面真实的棱。可我还是看不见那条穿越整个正方体的体对角线。因为牙签插不进去,插进去就穿了。那道立体几何我考了 29 分。宣战,惨败,梦魇。这个故事听起来像是一个空间想象力弱到极致的人的不甘,其实不是。多年之后我才发现,我的病因精确得可以写进病历,我看不到三维,不是脑子里缺一根弦,是黑板上缺一个维度。黑板是静态的,无法旋转,无法闪烁。二维的纸装不下三维的真理,这不是我的错,是媒介的错。那么媒介变了之后呢?后来我在计算机里,给一个棱长为 2 的正方体切下角上的四个点,输入坐标,A 是原点,B、C、D 分别在三根轴上。三个向量一列,行列式一展开,取绝对值除以 6,体积就出来了。四分之三。当年在黑板上辅助线画到崩溃的那道题,屏幕上一行代码,完事。publicclassNight12Volume{// 高三立体几何的旧伤,用向量偿还。// 棱长 2 的正方体,从一个角切下来的三棱锥:// A(0,0,0) B(2,0,0) C(0,2,0) D(0,0,2),求四面体 ABCD 的体积。// 当年在黑板上辅助线画到崩溃,如今三个向量、一个行列式,六分之一的事。staticdoubledet(double[] u,double[] v,double[] w){returnu[0] * (v[1] * w[2] - v[2] * w[1]) - u[1] * (v[0] * w[2] - v[2] * w[0]) + u[2] * (v[0] * w[1] - v[1] * w[0]); }publicstaticvoidmain(String[] args){double[]A={0,0,0};double[]B={2,0,0};double[]C={0,2,0};double[]D={0,0,2};double[]AB={B[0] - A[0], B[1] - A[1], B[2] - A[2]};double[]AC={C[0] - A[0], C[1] - A[1], C[2] - A[2]};double[]AD={D[0] - A[0], D[1] - A[1], D[2] - A[2]};doublev=Math.abs(det(AB, AC, AD)) /6.0; System.out.println("四面体体积 = "+ v +"(正方体体积 8 的 "+ (v /8.0) +")"); System.out.println("辅助线:零条。旋转:无限次。闪烁:每一次调试。"); } }向量法不需要辅助线,它只需要三个箭头。从 A 出发,指向 B、C、D,三个向量一列,行列式一展开,绝对值除以 6,体积自己走出来。这套章法也不挑图,正方体也好,歪四面体也好,坐标一换,章法照旧。立体几何从此不再需要你在脑子里旋转纸,需要旋转的时候,屏幕替你转,无限次。辅助线,零条。旋转,无限次。闪烁,每一次调试。黑板是静态的,无法旋转,无法闪烁。屏幕可以。数学没有变,难也没有变,变的是媒介。当年装不下的浪漫,屏幕装得下。这一夜还剩最后一笔,要跟一个传说清算。你可能听过这个故事。1650 年前后,52 岁的笛卡尔流落斯德哥尔摩,在街头偶遇 18 岁的公主克里斯汀,被国王召进宫当她的数学教师。师生相恋,国王震怒,放逐笛卡尔。分别之际,他寄出最后一封信,通篇没有一个字,只有一行公式,r 等于 a 乘以 1 减 sinθ。满朝文武无人能解,公主在坐标纸上把它画了出来。一颗心。先照实说,这个故事是编的,无任何史料。真实的笛卡尔 1649 年确实去了斯德哥尔摩,学生是 32 岁的瑞典女王克里斯蒂娜,次年冬天他死于肺炎。没有第十三封信,没有公主。和物不知数一样,传说都是编的。可是这条曲线是真的。$r=a(1-\sin\theta)$,画出来是一个圆瓣加一个尖,学名心形线。我在 2019 年的那封告白里写过它,说它诉说着笛卡尔和公主的爱情故事。今年,我用 Java 把它真画了出来,旁边摆上我自己用字符排的另一颗心。左边是 for 循环唱的歌,右边是公式画的线。传说里它是心。画出来,你自己看,像什么?像猴子屁股。而猴子屁股,本来就是心形的。编的浪漫传了百年,真的公式喂过齿轮,也养过屁股。可猴子屁股本来就是心形的,所以编的也没白编。这一段你要是笑了,那就对了。数学的笑话讲到最后,从来都是温柔的。故事讲完,还剩一个真正的彩蛋。有人不满足于心形线的单瓣,用两个函数拼出了一颗更标准的心。上半,$f(x)=\sqrt{1-(|x|-1)^2}$,两个圆瓣。下半,$g(x)=\arccos(1-|x|)-\pi$,一个尖底。f 画上半,g 画下半。我盯着这幅图看了很久,然后想起了自己在 2021 年的一篇演讲里写下的话,理性的思维可以让人看见睿智的天空,感性的心灵却能让人触摸温情的世界。原来那句话,早就是这对函数的人话版本。理性画看得见的上半,感性画藏起来的下半,缺了谁,这颗心都拼不完整。李白的数学是无穷与连续,飞流直下三千尺;杜甫的算法是有限与离散,语不惊人死不休。他们两个人一辈子只见过几面,可后人说,李杜文章在,光焰万丈长。数学和算法也是这样,一个负责提出无穷的问题,一个负责给出有限的答案。我的这本夜话,就摆在他们的桌子边上,每一夜,都是一次李杜同框。所以,回到那位读者的留言。你的数学很厉害。谢谢。但我想把实话原样交回。我的数学至今很差,纸笔推积分还是不会,限时心算还是不行。真实的图景是这样,我外包了执行,保留了提问和判断,然后把余生的每一夜,都用来偿还当年欠下的那道题。补偿是真的。可补偿不丢人。数学缺的从来不是手,是敢提问的人。三封告别信都是我写的。而这一夜,是数学的回信。它说,你从没离开,我也从没离开。分数只陪了你十年,我陪了你一生。下一夜,还讲我的故事吗?讲。一直都讲。packagepoem;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassPoem{publicstaticvoidmain(String[] args){DatespecialTime=newDate(121,2,15); reunion(specialTime); neverForget("teacher's love"); walkToHeartAgain(); neverSayGoodbye(); loveForever(); drawHeart(); System.out.println("\t\t\t\t\t\t"+"秋天的怀念"); }publicstaticvoidreunion(Date specialTime){DateFormatdf=newSimpleDateFormat("YYYY-MM-dd");Stringformat=df.format(specialTime); System.out.println("\t\t\t"+format +"特别的日子"); System.out.println("\t\t\t"+"重逢于照亮哈佛红的那抹夕阳"); }publicstaticvoidneverForget(String love){ System.out.println("\t\t\t"+"师恩绵长犹未忘"); }publicstaticvoidwalkToHeartAgain(){ System.out.println("\t\t\t"+"再一次走进你温暖的心房"); }publicstaticvoidneverSayGoodbye(){ System.out.println("\t\t\t"+"这一次,不说再见"); }publicstaticvoidloveForever(){intendTime=Integer.MAX_VALUE -1;while(endTime < Integer.MAX_VALUE) { System.out.println("\t\t\t"+"重逢的这一秒便是我们的永恒"); endTime++; } }publicstaticvoiddrawHeart(){for(inti=0, k =0; i <14; i++) {if(i <3) {for(intj=0; j <5-2* i; j++) { System.out.print(" "); }if(i ==2) {for(intj=0; j <6+4* i -1; j++) { System.out.print("母"); }for(intj=0; j <7-4* i +2; j++) { System.out.print(" "); }for(intj=0; j <6+4* i -1; j++) { System.out.print("校"); } }else{for(intj=0; j <6+4* i; j++) { System.out.print("我"); }for(intj=0; j <7-4* i; j++) { System.out.print(" "); }for(intj=0; j <6+4* i; j++) { System.out.print("爱"); } } }elseif(i <6) {for(intj=0; j <29; j++) { System.out.print("的"); } }else{if(i ==13) {for(intj=0; j <2* (i -6); j++) { System.out.print(" "); } System.out.print("!"); }else{for(intj=0; j <2* (i -6) +1; j++) { System.out.print(" "); }for(intj=1; j <28-4* k; j++) { System.out.print("美"); } k++; } } System.out.println(); } } }① 真伪核对逐条照实登记。Ⅰ 分数年表 五年级 98 分、初一下学期期末统考 59 分、中考 123 分、高三立体几何单元考 29 分、高考数学 98 分(满分 150)、2020 考研总分 248 且数学未过线、大学高数作业连续满分,均为 秋天的怀念 亲历自述,以本人历年日记为据(真)。外婆曾在师范学校任教、考研报考动机与其相关(真)。Ⅱ 三封信与演讲 2017-05-11《我与数学的爱恨情仇》、2019-12-23《对数学的告白》(署名你所看不起的学渣)、2020-02-21《经历过风雨,未必见彩虹》、2021-10-08《梦想之途,一路阳光》,均为 秋天的怀念 原文存档,本夜引文照录,个别错字径改(真,已披露)。Ⅲ computer 词源 该词 1613 年首见于印刷品(Richard Braithwaite,The Yong Mans Gleanings),本义为做计算的人;二十世纪前 computer 是人类职业,天文台与科研机构雇人专职计算(真)。Ⅳ algorithm 词源 源自花拉子米(al-Khwarizmi)之拉丁化,第九世纪,比程大位早七百年(真,第十一夜已核)。Ⅴ 雉兔同笼 《孙子算经》卷下第三十一题,三十五头九十四足,答雉二十三兔十二(真,实跑验证);与物不知数同出《孙子算经》(真)。Ⅵ 四面体体积 混合积绝对值除以六,棱长 2 正方体一角的三棱锥体积为 4/3,占正方体 1/6(真,实跑验证)。Ⅶ 心形线与传说 r=a(1−sinθ) 为真实曲线,学名心形线(cardioid),1674 年 Rømer 于齿轮研究中使用,1741 年 de Castillon 命名(真);笛卡尔与公主的第十三封信无任何史料,属网络传说(传说);现代分段函数真心 f、g 为 Desmos 时代流行图式,原创者不可考(真)。Ⅷ Poem.java 秋天的怀念 2021 年原作,字符心藏头我爱母校的美(真,脱敏定稿);恒久循环因 int 溢出,永恒恰好只打印一次(真,bug 即诗)。Ⅸ 口述录入手脚 外婆口述、立体几何口述、X 光片段均为原样收录,其中对角线的量词按机审规范作了调整(已披露);AI 对话场景为叙事演绎,对话内容即本夜数学事实(演绎)。Ⅹ 实跑记录 JDK 21。鸡兔同笼枚举得雉 23 兔 12,验足 94;四面体体积 1.3333 即 4/3;Poem.java 输出 2021-03-15 心形一幅,藏头完整。② 今夜习题三道,评论区见。Ⅰ 今有龟鹤同池,上有四十头,下有一百一十二足,问龟鹤各几何。枚举一遍,再想想假设法省掉了什么。Ⅱ 把第十二夜那颗四面体的正方体棱长改成 3,重算角上三棱锥的体积。看看它占正方体的比例,变没变。Ⅲ 幻觉检测。把 AI 撤走,列出你的哪三样成果还站得住。这道题没有标准答案,但有唯一要求,证据必须不经过任何人的嘴。本书目录导航上一篇:第十一夜 韩信点兵 下一篇:第十三夜 幻方,武侠世界里的数学迷宫 起点:卷首语·算法童话版权声明:本文为作者原创,受著作权法保护。未经授权禁止转载、搬运、摘编、改编及任何形式的二次创作;个人学习引用请注明作者与原文出处。转载授权请联系作者(CSDN 私信)。侵权必究。