聪明的白羊们

作者: Athlon_BE | 来源:发表于2019-03-20 00:02 被阅读173次

    经常在朋友圈中看到“都9102年了”这样的说法,我一直不解,后来经小朋友们点拨,才知道这是2019年反过来说的梗儿,意思是“过时了”。作为中老年理工男,我自然不会这么轻易地承认自己out了的这个事实,心中下意识地会回怼一句:有本事到2112年再说这句话啊!

    2112年是下一个回文(palindrome)数字年,正着念和反着念都是同一个数字。2112离今年还有……不到一百年吧,今天再小的小朋友估计也很难看到这一年的到来。不过如果我们把月和日的数字也加进来,那么下一个回文日期倒是很快就会到来:用英式的写法,这个日子是9月10日,9-10-2019;用中式的写法,这个日子会稍晚一点,在10月2日,2019-10-2。

    小时候很喜欢看外公书柜里的书,比如《声律启蒙》,比如《笠翁对韵》。记得当时看过一本人民出版社出版的《古今联话》(年代久远,书名或许有出入),里面有一首对联我现在还记得。

    传说乾隆皇帝微服私访,去了一家叫做“天然居”的饭庄吃饭,看到“天然居”的招牌,想到自己天子的身份,不禁脱口而出:“客上天然居,居然天上客”,意思是来到天然居微服私访的客人居然是来自天庭的皇上。乾隆爷好不得意,因为这句上联不仅大气磅礴,而且是个十字回文联,正向和反向读出来都是同一句话。得意之余,他便让一旁的纪晓岚对下联。纪晓岚想起当天私访的路上刚刚经过大佛寺,于是回答道:人过大佛寺,寺佛大过人。见纪晓岚思路敏捷,乾隆爷非常高兴。纪晓岚回到家,和朋友说起此事,朋友说:你这个下联工整是工整,但缺了些意境,何不对“僧游云隐寺,寺隐云游僧”?纪晓岚心悦诚服。

    下联“人过大佛寺,寺佛大过人”、“僧游云隐寺,寺隐云游僧”和上联的“客上天然居,居然天上客”一样,也是正反读出来都一样的回文。类似的文字游戏,存在于不同的语言之中。相比于汉字的精炼和富含意境,拉丁文字胜在字母拼写多样,所以更容易构造出以字母为单位的回文句子,比如英语中的Madam, I’m Adam(女士,我是亚当),又比如荷兰语中的Mooi, dit idioom(好棒啊,这个成语)。

    日语虽然不属于拉丁语,但它有着强烈的拼音文字特征,如果以假名为单位,日语的回文同样可以很精彩。比如“新幹線沿線監視”,如果写成平假名,就是しんかんせん えんせん かんし,可以看出,这串假名是一个以正中那个え为中心对称的回文。又如年终时新年快乐的祝福语“年末つまんね”,写成平假名就是ねんまつつまんね,同样是一句回文1

    让我们回到数字。

    在非负整数中,我们知道有些数是回文数,比如8,55,12821等,更多的数则不是回文数,比如45,1436721等。

    在回文数中有一个特别的数,它由2个1、3个6和26个0组成,即1000000000000066600000000000001,这个数的奇特之处在于它既是回文数,又是质数,它长达31位,是如此的对称,却没有除了1和它本身之外的其它因子。因为这个数的中间有个666,所以它被称之为贝尔芬格质数(Belphegor's prime),贝尔芬格是西方文化中一个以“懒惰、好逸恶劳”著称的恶魔。

    对于那些非回文数,人们发现,任何一个自然数都能表示为三个回文数之和。这个论题看上去非常简单,任何会多位数加法的小朋友都可以验证;但实际上这个论题的证明非常复杂,有兴趣的朋友可以去看看长达近40页的论文原文2

    下面,我们来尝试证明对于所有小于1000的自然数该论题是成立的。这里,我们用\overline{abc}来表示一个百位、十位和个位分别为数字a、b和c的三位数。

    1)很显然,对于所有的一位数来说,它们自己本身就是回文数,所以对于任意一个一位数\overline{a}来说,可以有\overline{a} = \overline{a} + 0 + 0,其中a和0都是回文数。

    2)现在考虑两位数。

    2.1)小于11的两位数只有1个:10。10可以表示为3个回文数之和,比如10 = 9 + 1 + 0

    2.2)大于10的两位数中有11,22,33……99一共9个回文数,各个回文数之间相差11。如果这个两位数本身就是这9个回文数之一,那么类似于一位数1),可以有:\overline{aa} = \overline{aa} + 0 + 0

    2.3)如果大于10的两位数\overline{ab}不是回文数,那么它一定位于上述9个回文数中连续两个回文数之间,且和较小的那个回文数之间相差1-10。以38为例,它和33相差5,所以可以有:38 = 33 + 5 + 0;又以87为例,它和77相差10,所以可以有:87 = 77 + 9 + 1

    我们注意到,2.3.1)只有当十位数比个位数大1时,比如87,54或者32,这个两位数的加和形式才需要3个非零回文数;2.3.2)对于其它两位数,比如38,71或者45,其加和实际上只需要2个非零回文数。

    两位数得证。

    3)对于三位数\overline{abc},我们考虑a和 b的大小关系。

    3.1.1)在a <= b的情况下,如果同时a <= c,那么我们可以有\overline{abc} = \overline{aba} + (c-a) + 0,其中c-a是一个0-9区间内的一位数。以368为例,368 = 363 + 5 + 0。特殊地,如果a = c,那么\overline{aba} = \overline{aba} + 0 + 0

    3.1.2)在a <= b的情况下,如果同时a > c,那么我们可以有\overline{abc} = \overline{a(b-1)c} + (10+c-a) + 0,其中10+c-a是一个1-9区间内的一位数。因为a <= ba >= 1,所以b >= 1b-1 >= 0,所以这里不存在百位上借位的问题。以110为例,110 = 101 + 9 + 0

    3.2)在a > b的情况下,我们可以先将\overline{abc}分解成为一个三位回文数和一个两位数,即\overline{abc} = \overline{(a-1)9(a-1)} + (11+10b+c-a)。因为a > b,所以b <= 8,有(11+10b+c-a) < (11+10b+c-b) = 11+9b+c <= 83+c,所以(11+10b+c-a)一定是个两位数。以867为例,867 = 797 + 70。又以952为例,952 = 898 + 54

    3.2.1)如果(11+10b+c-a)这个两位数不属于十位数字比个位数字大1的情况,那么根据2.3.2)的结论,这个两位数可以表示成为两个回文数之和,加上\overline{(a-1)9(a-1)},即\overline{abc}可以表示为三个回文数之和。以867为例,867 = 797 + 70 = 797 + 66 + 4

    3.2.2)如果(11+10b+c-a)这个两位数属于十位数字比个位数字大1的情况,那么我们将\overline{(a-1)9(a-1)}改写为\overline{(a-1)8(a-1)},这样剩余的数将比原来的二位数大10,从而不再属于十位数字比个位数字大1的情况,进而可以表示成为两个回文数之和。以952为例,952 = 898 + 54 = 888 + 64 = 888 + 55 + 9

    如果原来的二位数为98(实际上这种情况不存在),那么新的剩余数为108,也可以表示成为两个回文数之和,即99 + 9

    三位数得证。

    三位数以上的构建方法就比较复杂了。有人根据论文2中的算法,编了一个比较酷的网站3,你只须输入心中想到的任意一个自然数,网站将给出三个回文数,它们之和正好是你输入的那个自然数。

    参考出处:

    题图来源:https://www.reddit.com/r/comics/comments/afn8fu/palindrome_smart_rams_oc/

    1. https://withnews.jp/article/f0181226004qq000000000000000W00o10101qq000018559A

    2. http://matematicas.uam.es/~franciscojavier.cilleruelo/Papers/three%20palindromes%20are%20enough%20-%202016-.pdf

    3. http://somethingorotherwhatever.com/sum-of-3-palindromes/

    文\Athlon
    2019.3.19

    相关文章

      网友评论

        本文标题:聪明的白羊们

        本文链接:https://www.haomeiwen.com/subject/xvoomqtx.html