打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
鬼谷子算术

孙膑,庞涓都是鬼谷子的徒弟.
 
一天鬼出了这道题目:他从2到99中选出两个不同的整数,把积告诉孙,把和告诉庞; 
庞说:我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么。 
孙说:我本来的确不知道,但是听你这么一说,我现在能够确定这两个数字了。 
庞说:既然你这么说,我现在也知道这两个数字是什么了。

解答一:孙庞猜数的手算推理解法:
  1)按照庞的第一句话的后半部分,我们肯定庞知道的和S肯定不会大于54。
  因为如果和54<S<54+99,那么S可以写为S=53+a,a<=99。如果鬼谷子选的两个数字恰好是53和a,那么孙知道的积M就是M=53×a,于是孙知道,这原来两个数中至少有一个含有53这个因子,因为53是个素数。可是小于100,又有53这个因子的,只能是53本身,所以孙就可以只凭这个积53×a推断出这两个数术53和a。所以如果庞知道的S大于54的话,他就不敢排除两个数是53和a这种可能,也就不敢贸然说“但是我肯定你也不知道这两个数是什么”这种话。
  如果53+99<S<=97+99,那么S可以写为S=97+a,同以上推理,也不可能。
  如果S=98+99,那么庞可以立刻判断出,这两个数只能是98和99,而且M只能是98×99,
  孙也可以知道这两个术,所以显然不可能。
  2)按照庞的第一句话的后半部分,我们还可以肯定庞知道的和S不可以表示为两个素数的和。
  否则的话,如果鬼谷子选的两个数字恰好就是这两个素数,那么孙知道积M后,就可以得到唯一的素因子分解,判断出结果。于是庞还是不敢说“但是我肯定你也不知道这两个数是什么”这种话。
  根据哥德巴赫猜想,任何大于4的偶数都可以表示为两个素数之和,对54以下的偶数,猜想肯定被验证过,所以S一定不能是偶数。
  另外型为S=2+p的奇数,其中p是奇素数的那些S也同样要排除掉。
  还有S=51也要排除掉,因为51=17+2×17。如果鬼谷子选的是(17,2×17),那么孙知道的将是M=2×17×17,他对鬼谷子原来的两数的猜想只能是(17,2×17)。(为什么51要单独拿出来,要看下面的推理)
  3)于是我们得到S必须在以下数中:
  11 17 23 27 29 35 37 41 47 53

  另外一方面,只要庞的S在上面这些数中,他就可以说“但是我肯定你也不知道这两个数是什么”,因为这些数无论怎么拆成两数和,都至少有一个数是合数(必是一偶一奇,如果偶的那个大于2,它就是合数,如果偶的那个等于2,我们上面的步骤已经保证奇的那个是合数),也就是S只能拆成a)S=2+a×b 或 b)S=a+2^n×b这两个样子,其中a和b都是奇数,n>=1。那么(下面我说的“至少两组数”中的两组数都不相同,而且的确存在(也就是那些数都小于100)的理由我就不写了,根据条件很显然)
  a)或者孙的M=2×a×b,孙就会在(2×a,b)和(2,a×b)至少两组数里拿不定主意(a和b都是奇数,所以这两组数一定不同);
  b)或者M=2^n×a×b,
  如果n>1,那么孙就会在(2^(n-1)×a,2×b)和(2^n×a,b)至少两组数里拿不定主意;
  如果n=1,而且a不等于b,那么孙就会在(2×a,b)和(2b,a)至少两组数里拿不定主  意;
  如果n=1,而且a等于b,这意味着S=a+2×a=3a,所以S一定是3的倍数,我们只要
  讨论S=27就可以了。27如果被拆成了S=9+18,那么孙拿到的M=9×18,他就会在
  (9,18)和(27,6)至少两组数里拿不定主意。
  (上面对51的讨论就是从这最后一种情况的讨论发现的,我不知道上面的论证是否
  过分烦琐了,但是看看51这个“特例”,我怀疑严格的论证可能就得这么烦) 现在我们知道,当且仅当庞得到的和数S在 C={11,17, 23, 27, 29, 35, 37, 41, 47, 53}中,他才会说出“我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么”这句话  孙膑可以和我们得到同样的结论,他还比我们多知道那个M。
  4)孙的话“我现在能够确定这两个数字了”表明,他把M分解成素因子后,然后组合成关于鬼谷子的那两个数的若干个猜想中,有且仅有一个猜想的和在C中。否则的话,他还是会在多个猜想之间拿不定主意。
  庞涓听了孙的话也可以得到和我们一样的结论,他还比我们多知道那个S。
  5)庞的话“我现在也知道这两个数字是什么了”表明,他把S拆成两数和后,也得到了关于鬼谷子的那两个数的若干个猜想,但是在所有这些拆法中,只有一种满足4)里的条件,否则他不会知道究竟是哪种情况,使得孙膑推断出那两个数来。
  于是我们可以排除掉C中那些可以用两种方法表示为S=2^n+p的S,其中n>1,p为素数。因为如果S=2^n1+p1=2^n2+p2,无论是(2^n1,p1)还是(2^n2,p2)这两种情况,孙膑都可以由M=2^n1×p1或M=2^n2×p2来断定出正确的结果,因为由M得到的各种两数组合,只有(2^n,p)这样的组合,两数和才是奇数,从而在C中,于是孙膑就可以宣布自己知道了是怎么回事,可庞涓却还得为(2^n1,p1)还是(2^n2,p2)这 两种情况犯愁。
  因为11=4+7=8+3,23=4+19=16+7,27=4+23=16+11,35=4+31=16+19,37=8+29=32+5,47=4+43=16+31。于是S的可能值只能在1729 41 53中。让我们继续缩小这个表。
  29不可能,因为29=2+27=4+25。无论是(2,27)和(4,25),孙膑都可以正确判断出来:
  a)如果是(2,27),M=2×27=2×3×3×3,那么孙可以猜的组合是(2,27)(3,18)(6,9),
  后面两种对应的S为21和15,都不在C中,故不可能,于是只能是(2,27)。
  b)如果是(4,25),M=4×25=2×2×5×5,那么孙可以猜的组合是(2,50)(4,25)(5,20)  (10,10)。只有(4,25)的S才在C中。
  可是庞涓却要为孙膑的M到底是2×27还是4×25苦恼。
  41不可能,因为41=4+37=10+31。后面推理略。
  53不可能,因为53=6+47=16+37。后面推理略。
  研究一下17。这下我们得考虑所有17的两数和拆法:
  (2,15):那么M=2×15=2×3×5=6×5,而6+5=11也在C中,所以一定不是这个M,否则4)的条件不能满足,孙“我现在能够确定这两个数字了”的话说不出来。
  (3,14):那么M=3×14=2×3×7=2×21,而2+21=23也在C中。后面推理略。
  (4,13):那么M=4×13=2×2×13。那么孙可以猜的组合是(2,26)(4,13),只有(4,13)的和在C中,所以这种情况孙膑可以说4)中的话。
  (5,12):那么M=5×12=2×2×3×5=3×20,而3+20=23也在C中。后面推理略。
  (6,11):那么M=6×11=2×3×11=2×33,而2+33=35也在C中。后面推理略。
  (7,10):那么M=7×10=2×5×7=2×35,而2+35=37也在C中。后面推理略。
  (8,9):那么M=8×9=2×2×2×3×3=3×24,而3+24=27也在C中。后面推理略。

  于是在S=17时,只有(4,13)这种情况,孙膑才可以猜出那两数是什么,既然如此,庞涓就知道这两个数是什么,说出“我现在也知道这两个数字是什么了”。听了庞涓的话,于是我们也知道,这两数该是(4,13)。

解答二:

Private Sub Command2_Click()
Dim Out As Long
Dim TrueNum As Boolean
Dim As Long
Dim As Long, As Long
For Out To 197
    If ReturnResult(Out) Then
        Debug.Print "out=" Out '这里打印出1的结果11,17,23,27,29,35,37,41,47,53
    End If
Next
End Sub
Private Function ReturnResult(Out As Long) As Boolean
Dim As Long
Dim TrueNum As Boolean
TrueNum True
0
For To Out
    For To Out
        If Out Then
          1
          TrueNum ReturnNum(a b)
          If TrueNum False Then
            Exit For
          End If
        End If
    Next
    If TrueNum False Then
        Exit For
    End If
Next
If N> And TrueNum True Then
    ReturnResult True
Else
    ReturnResult False
End If
End Function

Private Function ReturnNum(Out As Long) As Boolean
Dim As Long
0
For To 99
If a> Out Then
        Exit For
    End If
    
    For To 99
If a * b> Out Then
            Exit For
        End If
        If Out Then
          1
        End If
    Next
Next
If N> Then
    ReturnNum True
Else
    ReturnNum False
End If
End Function
2、

'

Private Sub Command1_Click()
Dim Out(10) As Long
Out(0) 11
Out(1) 17
Out(2) 23
Out(3) 27
Out(4) 29
Out(5) 35
Out(6) 37
Out(7) 41
Out(8) 47
Out(9) 53
For To 9
    RetuResult (Out(i))
Next
End Sub


Private Sub RetuResult(Out As Long)
Dim As Long
Dim As Long, As Long
Dim TrueNum As Boolean
0
For To Out
    For To Out
        If Out Then
          If RetuNum(a b) Then
            1
            If Then
                a: b
            End If
          End If
        End If
    Next
Next
If Then
     Debug.Print "X=" ";y=" ’这里是真正的结果4,13
End If
End Sub

Private Function RetuNum(Out1 As Long) As Boolean
Dim As Long
Dim Sumab As Long
Dim Out(10) As Long
Out(0) 11
Out(1) 17
Out(2) 23
Out(3) 27
Out(4) 29
Out(5) 35
Out(6) 37
Out(7) 41
Out(8) 47
Out(9) 53
0
For To Out1
    For To Out1
        If Out1 Then
            Sumab b
            If Sumab Out(0) Or Sumab Out(1) Or Sumab Out(2) Or Sumab Out(3) Or Sumab Out(4) Or Sumab Out(5) Or Sumab Out(6) Or Sumab Out(7) Or Sumab Out(8) Or Sumab Out(9) Then
                1
            End If
        End If
    Next
Next
If Then
    RetuNum True
Else
    RetuNum False
End If
End Function
三:第一,庞知道A+B的值,将其分解成一系列的可能解M+N,发现M和N不同时为素数,
也不能分解成其中一个素数大于等于53,于是断定孙不可能知道A和B的值。
第二,孙知道A*B的值,将其分解成一系列可能解X*Y。孙听到庞的判断后,立即知
道了A和B的值。因此X+Y的值必有且仅有一个不能分解成两个素数之和。
第三,当庞知道孙能够判断出A和B的值时,就立即知道A和B的值。这说明将各组M*N的
值分解成各种可能解的K*L,只有一组由M*N分解出来的K*L满足:K+L的值有且仅有
一个不能分解成两个素数之和。
根据第一点,可知A+B的值不可能分解成两个素数之和。2至99之间所有素数两两加
和,得到一系列数字。
A+B介于[5,197]之间,不能分解成两个素数之和的数字是:
6 11 17 23 27 29 35 37 41 47 51 53 57 59 65 67 71 77 79 
83 87 89 93 95 97,101至189的全部奇数,166 174 178 182 184 188,
190至197。
由于6 196 197只有唯一解,所以排除。
再排除能分解出大于等于53素数的数字,就剩下11 17 23 27 29 35 37 41 
47 51 53和194。194的任一个可能解,对孙都是唯一解,也排除。

余下的11 17 23 27 29 35 37 41 47 51 53就可以根据第二第三条来判定。
比如11,对庞而言可能的(A,B)为(2,9)(3,8)(4,7)(5,6),每一组都满足第二条,也就不满足第三条。
最后答案是什么? 
两数之和不可能超过53。
如你的解success_a=19,success_b=94,
对庞来说,将113分解,如果这两个数为53和60,那么孙的两数
之积为3180,分解为2*2*3*5*53,由于范围是[2,99],故孙立即
可以得出唯一解。那么庞就不可能判断:孙不能得出答案。
根据分析,两数之和只可能为11 17 23 27 29 35 37 41 
47 51 53。
23也不是答案。为简单起见,只取它能分解出的三组数(4,19)(7,16)(10,13)。
若为(4,19),孙得到可能解为2*38和4*19,其和分别为40和23;
若为(7,16),他得到可能解为2*56,4*28,7*16和8*14,其和分别为57,32,23和22。
若为(10,13),他得到可能解为2*65,5*26和10*13,其和分别为67,31和23。
在这三种情况下,孙都可以从庞的判断得出唯一结论。
但是,庞却不能由孙的肯定而判断出这两个数是(4,19),(7,16)还是(10,13)。
所以23不是题解。
先前证明鬼谷子的题目的解只可能在11 17 23 27 29 35 37 41 47 51 53中间。
到底是哪一个,一步步验算太繁且容易出错,所以就没有继续下去。
现在找到一个简便的判别方法:
对某组可能解A和B,A+B一定不能分解成两素数之和,且一定可以分解成一系列2^n+a的形式,
其中n一定大于1。
推理1)
如果a是素数,则由a*2^n分解出来的一系列a*2^n,2a*2^(n-1)...(2^(n-1)*a)*2可能解中,
必然只有一个a+2^n不能分解成两素数之和。因为其它的可能值都是偶数,根据还没证明的歌
德巴赫猜想,全都可以分解成两个素数之和。
那么,对某组可能解A和B,如果由A+B分解成的一系列2^n+a,a有两个或两个以上素数解,这
组A和B一定不是题解。
推理2)
每个A+B一定有一个素数解a。
如果其它某个a是两个素数之积b*c,当b+c2^n或者c+b2^n能分解成两个素数之和,或者大于53,
由于b*c+2^n满足不能分解成两个素数之和这一条件,这个b*c+2^n必然也满足第二条。
即,有多组解满足第二条,那么这组A和B一定不是题解。
对于a是两个以上素数之积的情况,可以类推。
下表列出所有可能解A+B与2^n的差,即a的值:
16 32
11 
17 13 
23 19 15 
27 23 19 11 
29 25 21 13 
35 31 27 19 3
37 33 29 21 5
41 37 33 25 9
47 43 39 31 15
51 47 43 35 19
53 49 45 37 21
根据推理1),11 23 27 35 37 47 51都可以排除。剩下17 29 41 53。
根据推理2)
29有(4,25)(8,21)(13,16)三组满足第二条。
41有(4,37)(16,25)(9,32)三组满足第二条。
53有(8,45)(16,37)(21,32)三组满足第二条。
所以只剩下17是可能解。
验证表明,17是唯一解。
如果是84和91,会有孙不需要暗示立即可以肯定判断的情况 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
古老的数学问题
鬼谷子猜数 - 智力题的巅峰之作,奥数只是渣渣
鬼谷算之孙庞猜数[数学奥林匹克报]
《前七国志》
孙庞猜数(下)
求关于孙膑、孙策、孙武的简单介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服