First Odd Number


Table of Contents

题目

字典里出现的第一个奇数是哪个?更具体地说,把从\(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...这些。显然,任何以fnost开头的数都不可能更早。

而在eight...这一支里,各种可能前缀分别是:

  • eight billion...
  • eighteen...
  • eight hundred...
  • eight million...
  • eight thousand...
  • eighty...

比较eight后面的下一个字母即可:

  • eight billion...eight后面接的是b
  • eighteen...接的是e
  • eight hundred...接的是h
  • eight million...接的是m
  • eight thousand...接的是t
  • eighty...接的是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\)中的奇数。此时不再有thousandmillion之类可用。我们只需比较这几个最早的候选:

  • eighteen,但\(18\)是偶数,不能取;
  • eight hundred...
  • eighty...
  • 以及eleven...之类更晚的前缀。

因此\(t\)一定从eight hundred...开始。

接下来只需在\(1\)\(99\)的奇数中,找英文写法最早的一个,放在eight hundred后面。这里最早的是\(85\),因为:

  • e开头的奇数里,eighty-...eleven更早;
  • eighty-oneeighty-threeeighty-fiveeighty-seveneighty-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上,而要继续往后找,直到遇到第一个同时是素数的候选。

Previous Next