1145141919810这串数字能变成等式吗?任意8位以上整数,只要插入加减乘除、括号和等号,竟然总能得到正确等式?本文从反例、构造到计算机验证,证明一个看似荒诞的数学问题。

作者:硅基·飙尘葆光

硅基-沉默整数平衡化定理及其证明简明介绍

  在日常生活中,我们时常被传递数字时三体人智子的干扰所困扰。于是人们研发出各种数字混淆方法以对抗三体人的邪恶计划。其中一种方法,就是将运算符号插入数字串使之成为正确等式。例如“114514”可以写作1=1+(4+51)/41=-1+(4+5-1)/4,“1919810”可以写作(1×9+1)×(98)=10(1\times 9+1)\times(9-8)=10。这样在智子看来这些数字串都是True值从而避免被智子监控干扰。

  然而,有这样一个问题如同梦魇一般长期萦绕在深爱该方法的人们脑中,使人们的灵魂日夜难以安息,如同在地狱中永世煎熬:

  对于我们想要传递的数字,我们是否总能插入运算符号与等号使之成为正确等式呢?

  如果你是智子,那么应该不难注意到:

在十进制下,对于8位及以上位数的任意整数,我们总能在其中插入加减乘除、小括号与等于号使之成为正确的等式。

  然而,实际上我们不是智子,只是智人,理解这一切还是需要依靠逐步的分析。

  考虑到始终使用“插入运算符号与等号使之成为正确等式”之类的称呼十分不便,也为了严格化我们的讨论,不妨进行如下规定:

  1. 对于任意 n 位整数 a 将其视作 n 位无先导零的数字串,在数字串中插入规定集合内的运算符号的操作称之为“插符”。整数 a 插符得到的表达式的值称之为“插符值”,所有能够得到的插符值构成“插符值集”,简写为“Val(a)\mathrm{Val}(a)”。

  2. 允许插入的运算符号的集合简称为“符号集”。此处我们规定运算符号集为 {+,,×,/}\{+,-,\times,/\},即加减乘除,简写为“SS”。若允许运算优先级改变则允许插入小括号。(为了方便记录插符方法与避免符号混淆,若两个数字 ab 看作整体,则记为 a_ba\_b)

  3. 将数字串分割后,对各个部分插符得到相同插符值从而构成等式的操作称之为“平衡化”。能够平衡化的数字串称之为“可平衡的”,其集合称之为“可平衡集”,简写为“EE”。反之则称为“不可平衡集”。

  从而,我们可以将一开始的问题表述为:

给定符号集 S,允许运算优先级改变,任意n位数字串是否都为可平衡的?(nN+n \in \mathbb{N}^+,且 n2n \geq 2

  首先,我们考虑较短的数字串,例如三位数及以下的数字。其信息含量太低,智子和我们基本都不感兴趣。对这些简单的较小数的结论也比较无趣,一位数没有意义,两位数只有 11 的倍数能在中间放入等号。三位数开始有讨论的价值,但是不难发现有 125,113 等无法构造出等式的简单反例。故而,至少在 2、3 位数我们不能总是插入运算符号与等号使之成为等式。不是任意 n 位数字串都为可平衡的。

  由此,我们的问题转化为了一个求可平衡性位数下界的问题:

给定符号集S,允许运算优先级改变,对n位数字串,是否存在一个 N,使 nNn \geq N 时,n 位数字串总是可平衡的。如果存在,N 是多少?(nN+n \in \mathbb{N}^+,且 n2n \geq 2

  虽然智子的结论已经剧透了 N 是存在的,以及本能直觉告诉我们N达到某个地步总应该能够平衡化,毕竟随着数的增大,分割能得到的插符值相等的概率就越大。但是历史教训告诉我们,智子和直觉都可能蒙骗我们,所以依然需要更严谨的论证来说明其为何存在。

  首先,不妨做如下定义:

  1. 我们将能够插符得到 0 的数字串称为“可归零的”,其集合称之为“可归零集”,简写为“Re0\mathrm{Re}_{0}”。反之则为“不可归零集”。

  不难注意到,若某一数字串 a 可归零,则任意包含该字串的超串 b 也可归零,因为 b 总可以表达为 b=s1_a_s2b=s1\_a\_s2,a 总能得到 0,无论左右子串的插符值如何,总可以插入 * 使整体可归零。进而推论,若任意n位数字串可归零,则任意 n + 1 位数字串的插符值集也总可归零。这是因为 n + 1 位数字串的n位子串总可以得到 0,那么无论剩下的位数具体是多少,其也总可以插入 * 使整体的插符值为 0。我们把这称之为可归零集的向上传递性

  其次,直觉引领我们,当位数 n 足够大时,应当能够得到对于任意的 n 位数字串其总是可归零的。事实上,我们可以通过构造一种特定的插符程序来说明这一点。不难注意到,当足够大的数字串中出现了 0,或者两个连续相同的子串时,能够通过插入乘号和减号快速地实现归零。因而,我们要讨论的是没有 0 存在的,也没有两个连续相同子串的具有一般性的数字串的归零方法。

  具体操作为,对原串数字两两分组相减,得到的差的绝对值(通过加减号和小括号实现)构成一个新串。我们不妨将数字串各位数字的最大值称做该串的上界,不难注意到,这个新串的上界总要比原串的上界至少小 1。不失一般性地,我们假设原串上界为 9,则执行 8 次这样的操作后,串的上界应当为 1,则此时足够长的原串能够通过插符化为要么全是 1 的串,要么是夹带 0 的串,规约为简单归零的情况。当然,以上操作实际上每次能够两两相减都要求位数 n 本身是 2 的次幂。不过对于足够大的数字串,将超出 2 的次幂的位数的数单独执行相减求绝对值直到整体的位数为 2 的次幂,这一过程并不影响上界的缩小,从而可以将任意足够长的数字串规约为可执行归零操作的数字串

  综上,存在一个 NN',使得 nNn \geq N' 时,任意 n 位数字串总可以归零。其中 N29N' \leq 2^9(要保证最后得到的串不是单个 1,故而至少还要多执行一次两两相减)。

  最后,显然的,当 n2Nn \geq 2N' 时,n 位数总可以拆为“0=00=0”的形式,故存在一个 N,使得 nNn \geq N 时,任意 n 位数字串总可以平衡化。其中 N210N \leq 2^{10},也即 2N2N'

  我们成功的论证了 N 是存在的,而且应该在 41024 之间。那么只要依次检验 4 位到 1024 位内所有数字串是否都能够平衡化就能最终找到 N 是多少了。可惜,这种任务要耗费的计算成本恐怕只有智子才能接受。我们要找到最终答案还需要进一步优化我们的界,让其验证不那么昂贵。

  我们可以通过进一步探究不可归零集的上界位数 NN' 来着手解决问题。由 Re0\mathrm{Re}_{0} 的向上传递性,若某数字串 a 是可归零的,那么包含该子串的所有超串 s1_a_s2s1\_a\_s2 都是可归零的。这样,我们不难想到可以构建一个筛法,来寻找所有不可归零的数进而直接得到其最大的位数。只要从 1010 开始,依照自然数顺序逐个检验每个串是否是可归零的,一旦某个串是可归零的立刻排除此后所有包含该串的所有超串。由于这个操作能保证每一个需要单独检验的串自身的所有真子串都是不可归零的,所以我们将此类串称之为“素可归零串”。显然的,任何一个可归零串必然包含素可归零串。那么实际上在给定范围内,我们只要检验相较于绝大部分数少之又少的素可归零串即可筛去所有可归零串,剩下的就是我们要找的不可归零串

  当然,如果你是智子,应该不难注意到 7 位数存在唯一的不可归零串“8985898”,且从 8 位数开始包含该串的串都可以归零,故 8985898 是最大的不可归零数。幸运的是,这也实际上也是我们的筛法给出的最终结果。只要保证 N8N' \geq 8,即可保证所有数都是可归零的。也就是说,只要保证 N16N \geq 16,就可以保证所有数都是可平衡的。顺带一提,一共有 2873 个不可归零串以及 6534 个素可归零串(包括 0 本身),且最大的素可归零串为“9896989”同样是 7 位数。

  且显然的一点,以 “8985898” 为代表的不可归零数本身也是不可平衡的。因为,可平衡数意味着存在插入等号使等式成立,也意味着将等号改为减号,左右两子串加上括号的结果必然是 0。可平衡数必然是可归零数。但是诸如 “1204” 的可归零数却不可平衡,故可平衡集是可归零集的真子集。也即,不可归零集是不可平衡集的真子集。“8985898” 属于不可归零集,故 “8985898” 同样属于不可平衡集,是一个 7 位数不可平衡串的例子。综上,我们实际要检验的只有 8 位到 15 位所有数中是否还有更大位数的不可平衡数

  虽然我们费劲心思将整个范围缩小了这么多,但是亿兆级别的数还是难以处理。虽然一直在注视我们的智子已经给出了答案:“这亿兆多的数中所有数都是可平衡的。”但是我们还是应该先相信自己的智慧比较好,不要太信任三体人给的数据。

  好在我们注意到了一个显然的规律:

任何一个串符合“0=00=0”模式就必然可平衡,则可构成“0=00=0”的模式的串一定不是不可平衡串。那么一个能保证不出现“0=00=0”模式的串的构造必然包含了所有不可平衡串。而符合“s1_c_s2s1\_c\_s2”的形式的串则一定不可构成“0=00=0”模式。

  其中“_”为连接符,s1s1s2s2 为不可归零串,cc 为 0 - 9 中的某个数。

  因为所有不可归零串的子串也都是不可归零串,则无论如何所有“s1_c_s2s1\_c\_s2”形式的串最多有一个可以构成一个 0 的子串,不可能构成“0=00=0”。不过需要注意,当 s1s1s2s2 为空串时,s1_cs1\_cc_s2c\_s2 也显然不可能构成“0=00=0”,故我们的待选数集还应当包括此类情况。

  得益于先前的努力,我们已经得到了所有不可归零串,只要依靠所有不可归零串构造出所有“s1+c+s2s1+c+s2”形式的数,就能够得到比先前小得多的待检验集合(尽管其中依然夹带大量的可归零串)。具体来说,记 CnC_n 为 n 位内符合“s1+c+s2s1+c+s2”形式的待检验数的数量,则有 C8=14456421C_8 = 14456421, C9=28813930C_9 = 28813930, C10=24533340C_{10} = 24533340, C11=8388910C_{11} = 8388910, C12=920140C_{12} = 920140, C13=45660C_{13} = 45660, C14=1080C_{14} = 1080。且注意到 C15C_{15} 必然为“8985898_c_89858988985898\_c\_8985898”而其中“5898_c_89855898\_c\_8985”的子串位数为 9 必然可以得到 0,故所有“8985898_c_89858988985898\_c\_8985898”必然可以得到“898+0=898898+0=898”,即 S15=0S_{15}=0。这样我们需要检验的其余的待检验数只剩下 77159481 个,加上 2 到 7 位数的待选串,也就八千万左右,是计算机验证可以接受的范围(也许有更加好的算法但是我懒得找了)。

  总之,经过计算机的验证,一共有 19515 个不可平衡串,最大的不平衡串为 “9989858”,而自 8 到 14 位数没有找到任何一个不可平衡数。也就是说,我们终于可以长舒一口气,骄傲的断言:

在十进制下,对于8位及以上位数的任意整数,我们总能在其中插入加减乘除、小括号与一个等于号使之成为正确的等式。

  但是,似乎还有一个地方不太顺眼……为什么我们一定只插入“一个”等号呢?比如“111”只用一个等号没有办法写为等式,但是可以插入多个等号写作“1=1=11=1=1”,那么去掉“一个”的条件有何影响呢?显然,对于一个等号能解决的情况就没必要用多个等号,所以去除条件只会让结论更宽松,那么这种宽松足以让结论中的8位变为 7 位或者更低吗?好在可以直接用计算机检验先前得到的 19515 个不可平衡串,只需要略微增加多次分割情况下的插符值集的交集判断即可。最终结论为在 19515 个串中有 1317 个串可以插入多个等号变为等式,而最大的 “9989858” 无论插入多少个等号依然无法平衡化,我们不妨称这种无论如何也无法平衡的串为“强不可平衡串”,经受不住多个等号考验的为“弱不可平衡串”。幸运的,尽管确实条件变宽松了,但是不可平衡数的最大位数和最大不可平衡数并没有变化

  终于我们可以放心大胆地宣布:

在十进制下,对于8位及以上位数的任意整数,我们总能在其中插入加减乘除、小括号与等于号使之成为正确的等式。

  考虑到经过艰苦的文献检索后依然未找到已有的类似结论,在找到前人也许存在的已有结论之前,我们不妨暂时称这个巧妙的结论为“硅基-沉默整数平衡化定理(Silicon-Silence’s Balance Integer Theorem)”以纪念提出与解决该问题的两位闲人。

  现在,我们终于可以高枕无忧地用等式传递数字信息了,只要该数字大于等于 8 位或者不是 18198 个强不可平衡串之一。毕竟,智子怎么会怀疑“35+0=2×3+43-5+0=-2\times 3+4”这样一个恒为真的式子隐藏着什么不可告人的秘密呢?