题目
字典里出现的第一个奇数是哪个?更具体地说,把从\(1\)到\(10^{10}\)的每个整数都用规范英文写出来(例如“two hundred eleven”“one thousand forty-two”),然后忽略空格和连字符,按字典序排列。问:排在最前面的奇数是哪一个?
分析
答案是\(8018018885\),即\(\text{eight billion eighteen million eighteen thousand eight hundred eighty-five}\)。
解题的关键不是穷举,而是按字典序一步一步找“最早可能出现的前缀”。
先看所有英文数词的开头。以字母顺序来说,最靠前的是以eig...开头的一类,也就是eight...、eighteen...、eighty...这些。显然,任何以f、n、o、s、t开头的数都不可能更早。
而在eight...这一支里,各种可能前缀分别是:
eight billion...eighteen...eight hundred...eight million...eight thousand...eighty...
比较eight后面的下一个字母即可:
eight billion...在eight后面接的是beighteen...接的是eeight hundred...接的是height million...接的是meight thousand...接的是teighty...接的是y
所以只要存在一个奇数以eight billion...开头,它就一定排在所有别的奇数前面。
这说明目标数一定形如\(8\text{ billion }+r\),其中\(r\)是一个正奇数,并且\(r<10^9\)。于是问题递归地变成:在\(1\)到\(10^9-1\)之间,哪个奇数的英文写法字典序最小?
现在上界变成了不到\(10^9\),已经不能再用billion。于是最靠前的候选前缀变成:
eighteen...eight hundred...eight million...eight thousand...eighty...
这里eighteen...最小,因为在共同前缀eight之后,它接的是e,比h,m,t,y都小。
但单独的\(18\)是偶数,所以最早的奇数必须从eighteen million...开始,而不能在eighteen处结束。于是\(r=18\text{ million }+s\),其中\(s\)是一个正奇数,且\(s<10^6\)。
同理,在\(1\)到\(10^6-1\)之间,最早的奇数前缀只能是eighteen thousand...,所以\(s=18\text{ thousand }+t\),其中\(t\)是一个正奇数,且\(t<1000\)。
最后只剩下\(1\)到\(999\)中的奇数。此时不再有thousand、million之类可用。我们只需比较这几个最早的候选:
eighteen,但\(18\)是偶数,不能取;eight hundred...;eighty...;- 以及
eleven...之类更晚的前缀。
因此\(t\)一定从eight hundred...开始。
接下来只需在\(1\)到\(99\)的奇数中,找英文写法最早的一个,放在eight hundred后面。这里最早的是\(85\),因为:
- 以
e开头的奇数里,eighty-...比eleven更早; - 在
eighty-one、eighty-three、eighty-five、eighty-seven、eighty-nine中,比较eighty-之后的首字母,依次是o,t,f,s,n,其中f最小,所以最早的是eighty-five。
故
\[ t=885。\]
于是
\[ s=18000+885=18885,\]
\[ r=18000000+18885=18018885,\]
最终得到
\[ 8\,000\,000\,000+18\,018\,885=8\,018\,018\,885。\]
所以字典序排在最前面的奇数是\(8018018885\)。
注记
如果把问题改成“字典序排在最前面的素数是哪一个”,答案则是\(8018018851\),即
\[ \text{eight billion eighteen million eighteen thousand eight hundred fifty-one}。\]
它和上面的最早奇数有着完全相同的长前缀eight billion eighteen million eighteen thousand eight hundred ...,只是最后为了满足素性,不能停在最早出现的eighty-five上,而要继续往后找,直到遇到第一个同时是素数的候选。