经常在朋友圈中看到“都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的自然数该论题是成立的。这里,我们用来表示一个百位、十位和个位分别为数字a、b和c的三位数。
1)很显然,对于所有的一位数来说,它们自己本身就是回文数,所以对于任意一个一位数来说,可以有,其中a和0都是回文数。
2)现在考虑两位数。
2.1)小于11的两位数只有1个:10。10可以表示为3个回文数之和,比如。
2.2)大于10的两位数中有11,22,33……99一共9个回文数,各个回文数之间相差11。如果这个两位数本身就是这9个回文数之一,那么类似于一位数1),可以有:。
2.3)如果大于10的两位数不是回文数,那么它一定位于上述9个回文数中连续两个回文数之间,且和较小的那个回文数之间相差1-10。以38为例,它和33相差5,所以可以有:;又以87为例,它和77相差10,所以可以有:。
我们注意到,2.3.1)只有当十位数比个位数大1时,比如87,54或者32,这个两位数的加和形式才需要3个非零回文数;2.3.2)对于其它两位数,比如38,71或者45,其加和实际上只需要2个非零回文数。
两位数得证。
3)对于三位数,我们考虑a和 b的大小关系。
3.1.1)在的情况下,如果同时,那么我们可以有,其中是一个0-9区间内的一位数。以368为例,。特殊地,如果,那么。
3.1.2)在的情况下,如果同时,那么我们可以有,其中是一个1-9区间内的一位数。因为,,所以,,所以这里不存在百位上借位的问题。以110为例,。
3.2)在的情况下,我们可以先将分解成为一个三位回文数和一个两位数,即。因为,所以,有,所以一定是个两位数。以867为例,。又以952为例,。
3.2.1)如果这个两位数不属于十位数字比个位数字大1的情况,那么根据2.3.2)的结论,这个两位数可以表示成为两个回文数之和,加上,即可以表示为三个回文数之和。以867为例,。
3.2.2)如果这个两位数属于十位数字比个位数字大1的情况,那么我们将改写为,这样剩余的数将比原来的二位数大10,从而不再属于十位数字比个位数字大1的情况,进而可以表示成为两个回文数之和。以952为例,。
如果原来的二位数为98(实际上这种情况不存在),那么新的剩余数为108,也可以表示成为两个回文数之和,即。
三位数得证。
三位数以上的构建方法就比较复杂了。有人根据论文【2】中的算法,编了一个比较酷的网站【3】,你只须输入心中想到的任意一个自然数,网站将给出三个回文数,它们之和正好是你输入的那个自然数。
参考出处:
题图来源:https://www.reddit.com/r/comics/comments/afn8fu/palindrome_smart_rams_oc/
文\Athlon
2019.3.19
网友评论