本題為廣為流傳的一經典邏輯推理題目,原題如下:
孫臏,龐涓都是鬼谷子的徒弟。一天鬼谷子出了這道題目:
他從2到99中選出兩個不同的整數,把積告訴孫,把和告訴龐;
龐說:我雖然不能確定這兩個數是什麼,但是我肯定你也不知道這兩個數是什麼。
孫說:我本來的確不知道,但是聽你這么一說,我現在能夠確定這兩個數字了。
龐說:既然你這么說,我現在也知道這兩個數字是什麼了。
請問這兩個數字是什麼?為什麼?
題目解答分析:
1、龐涓能確定孫臏肯定不知道這兩個數,可以有這樣幾個推論。
(A)龐涓手上的數字是4-198之間的數字,因為是兩個2-99的數之和。
(B)龐涓的和數一定不能拆成兩個質數之和,否則孫臏拿到的積可能拆成唯一一種兩個質數之積的情況,此時孫臏就可以猜出這兩個數,龐涓不能排除這種可能性,就不會有確信。
歌德巴赫猜想認為任意大於4的偶數都能被拆成兩個奇質數之和,但由於兩個質數都要小於99,所以龐涓手上的數可能為偶數,但這個偶數會接近200(有182,184,188,190,192,196和198),除此之外,只可能是奇數。
舉例:如果龐涓手上是28,可以拆成11+17,當孫臏拿到了187這個積,馬上就可以猜出鬼谷子給他的兩個數是11和17,與龐涓肯定孫臏不知道這兩個數相矛盾,因此 有可能拆成兩個2-99的質數和的數都要排除。
(C)龐涓的和數一定不是大於55的數。因為大於53的數始終能夠拆成質數53和另一個大於2的數,在2-99的限制下,這兩個數的乘積只有這唯一一種拆分方法。舉例:如果龐涓手上的和數是57,可以拆成53+4,當孫臏拿到212這個積,只有4*53這一種拆分可能性,因為2*106的另一種拆分方法導致有一個數超過99。由此排除55以上的所有所有數。
(D)滿足以上條件的這樣的數字僅有11個: 11,17,23,27,29,35,37,41,47,51,53。
2、孫臏知道自己手中的積,並說本來不知道,但現在知道了。意味著,孫臏看了自己手上的積後,分解因式對應的所有拆分情況中 有且僅有一種,兩個因數的和是以上11個數中的一個。
舉例:當龐涓看到兩個數的和是11時,孫臏看到兩數的積只能是18(2*9)、24(3*8)或者28(4*7),但不能是30(5*6)。因為如果是30,可以拆成2*15、3*10和5*6三種情況,其中2*15和5*6兩種情況下,由於2+15=17和5+6=11都在以上11個數內,所以滿足龐涓說出第一句話的要求,但孫臏不能確定鬼谷子的兩個數是2和15,還是5和6,所以不會說出他已經知道這兩個數的話。回頭再看積是18的情況,孫臏可以猜到鬼谷子的兩個數是2和9或者3和6,但因為3+6=9不在以上11個數內,不滿足龐涓說出第一句話的條件,所以不可能,於是只有2和9唯一一種可能。同理,積是24和28的情況都可以類似推理。
根據這個條件可以得到對應以上11個數時,可能的兩個數的情況:
可能的和(由龐涓說出第一句對話推得) | 可能的解(由孫臏說出第二句對話推得) |
11 | (2,9) (3,8) (4,7) |
17 | (4,13) |
23 | (4,19) (7,16) (10,13) |
27 | (2,25) (4,23) (5,22) (7,20) (8,19) (9,18) (10,17) (11,16) (13,14) |
29 | (2,27) (4,25) (6,23) (7,22) (8,21) (10,19) (11,18) (12,17) (13,16) |
35 | (3,32) (4,31) (6,29) (8,27) (9,26) (10,25) (12,23) (12,23) (14,21) (16,19) (17,18) |
37 | (5,32) (6,31) (8,29) (9,28) (16,21) (17,20) |
41 | (3,38) (4,37) (7,34) (9,32) (10,31) (12,29) (13,28) (15,26) (16,25) (17,24) (18,23) (19,22) |
47 | (4,43) (6,41) (7,40) (10,37) (13,34) (15,32) (16,31) (17,30) (18,29) (19,28) (22,25) (23,24) |
51 | (2,49) (3,48) (4,47) (5,46) (7,44) (8,43) (10,41) (11,40) (12,39) (13,38) (14,37) (16,35) (17,34) (18,33) (19,32) (20,31) (22,29) (23,28) (24,27) (25,26) |
53 | (5,48) (6,47) (8,45) (10,43) (12,41) (13,40) (15,38) (16,37) (17,36) (19,34) (20,33) (21,32) (22,31) (23,30) (24,29) (25,28) (26,27) |
3、龐涓是知道自己手中的和數,當孫臏猜出兩個數後,龐涓也知道了這兩個數字,由於龐涓並不知道兩數積,所以只能從以上表格出發確定,這就要求第二步有 唯一解。
舉例:如果龐涓拿到的和是11,那么有3種情況滿足孫臏說出第二句對話的條件,所以他並不能確定鬼谷子的兩個數是2和9,3和8還是4和7。這就不符合龐涓說出第三句對話的條件。
因此, 龐涓看到的和只可能是17,而孫臏看到的積是52,鬼谷子的兩個數是4和13。
第二步求解過程比較複雜,可以藉助VBA或C++等工具計算。主要邏輯包含三個循環,第一步循環以上11個數,記為S;在此循環內,第二步從2到(S-1)/2循環,找出所有A+B=S的正整數解A和B;在此循環內,第三步從2到循環,找出所有x*y=AB的所有正整數解(藉助mod函式)x和y,然後判斷x+y=11/17/23/27/29/35/37/41/47/51/53的情況(可以全部列出,也可以增加一個循環判定),如果只有唯一一次等式成立,則A和B為符合要求的解。