關於鬼谷子的數學推理題

    之前在網上看到一個小學奧數級別的題目如下:

一天鬼出了這道題目:他從2到99中選出兩個不同的整數,把積告訴孫,把和告訴龐; 龐說:我雖然不能確定這兩個數是什麼,但是我肯定你也不知道這兩個數是什麼。 孫說:我本來的確不知道,但是聽你這麼一說,我現在能夠確定這兩個數字了。 龐說:既然你這麼說,我現在也知道這兩個數字是什麼了。問這兩個數字是什麼?爲什麼" 

    自己想了好久用程序得出了結果。之所以想發這篇博客是因爲這道題目的結果非常的好,不是特殊的數字。而且看網上很多的解答都是用的數學推理,解題當然用數學推理,但是其中有很多的省略號。是因爲某種規律的具體項太多不用一一列舉。但是作爲一個程序員咱的法寶就是for循環。而且可以遍歷所有的情況。於是想在這裏打印出一個沒有省略號的解答過程。

    首先說一下我的推理過程:龐說我不知道,說明龐的數可以拆成不止一種情況排除5,6.你也不知道說明龐的這個數拆出的所有和爲這個數且在2到99之間的兩個數滿足以下的性質:

他們的乘積在2到99之間至少存在一組其他的因數。

    也就是說龐的這個和拆出兩個加數不包含乘積在這個區間內只有一對乘數的情況。

    比如38=31+7,31*7=217只有一種分解情況。如果是38,孫斌的積就有可能是217.他就有可能知道,而龐就不敢斷定孫肯定不知道。所以龐手中的和數排除38. 

   以此類推可以排除一大把數最後剩下:11   17   23   27   29   35   37   41   47   53.這個過程孫根據條件可以推理到這一步。然後孫說他知道了。剩下的就是我們推理了。

    孫說知道了說明這個兩數相乘等於孫手中的數,和等於龐手中的10個數之一的只有一種可能性。比如130=13*10 13+10=23,又如76=19*4 19+4=23,又如592=37*16  37 +16=53.所以說到這步孫斌知道了,我們不知道,龐涓不一定知道。但他說他也知道了。所以就剩我們不知道了。顯然想龐手中的數是13,他是不可能知道的。所以之所以他也知道了是因爲他手中的和拆出來的所有加數對的乘積在這10個數所有加數 對的乘積中是唯一存在的只有一個。所以符合條件的只有17=13+4 。

    上邊是用大白話說的下邊來曬一下用java main函數生成的解答過程:

2到99的不同整數的和是從5到197
龐涓肯定孫斌不知道,我們可以得出龐涓的數字不能是5或者6,因爲如果是5的話,根據題意兩個不同的正整數兩個數只能是2和3
如果是6,孫斌肯定知道。6只能是2和4,孫斌手中是8,他也能知道
還有就是龐涓手中的數拆成兩個數的話,兩個數產生的積,還可以在2到99之間找到另外的兩個數滿足,所以孫斌不能確定,下邊進行一一的排除:
對於7來說:  7可以寫成是:2+5它們的乘積是10,但是10在2到99之間除了2和5沒有別的因數了,所以排除7
對於8來說:  8可以寫成是:3+5它們的乘積是15,但是15在2到99之間除了3和5沒有別的因數了,所以排除8
對於9來說:  9可以寫成是:2+7它們的乘積是14,但是14在2到99之間除了2和7沒有別的因數了,所以排除9
對於10來說:  10可以寫成是:3+7它們的乘積是21,但是21在2到99之間除了3和7沒有別的因數了,所以排除10
對於11來說:  11的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於12來說:  12可以寫成是:3+9它們的乘積是27,但是27在2到99之間除了3和9沒有別的因數了,所以排除12
對於13來說:  13可以寫成是:2+11它們的乘積是22,但是22在2到99之間除了2和11沒有別的因數了,所以排除13
對於14來說:  14可以寫成是:3+11它們的乘積是33,但是33在2到99之間除了3和11沒有別的因數了,所以排除14
對於15來說:  15可以寫成是:2+13它們的乘積是26,但是26在2到99之間除了2和13沒有別的因數了,所以排除15
對於16來說:  16可以寫成是:3+13它們的乘積是39,但是39在2到99之間除了3和13沒有別的因數了,所以排除16
對於17來說:  17的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於18來說:  18可以寫成是:5+13它們的乘積是65,但是65在2到99之間除了5和13沒有別的因數了,所以排除18
對於19來說:  19可以寫成是:2+17它們的乘積是34,但是34在2到99之間除了2和17沒有別的因數了,所以排除19
對於20來說:  20可以寫成是:3+17它們的乘積是51,但是51在2到99之間除了3和17沒有別的因數了,所以排除20
對於21來說:  21可以寫成是:2+19它們的乘積是38,但是38在2到99之間除了2和19沒有別的因數了,所以排除21
對於22來說:  22可以寫成是:3+19它們的乘積是57,但是57在2到99之間除了3和19沒有別的因數了,所以排除22
對於23來說:  23的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於24來說:  24可以寫成是:5+19它們的乘積是95,但是95在2到99之間除了5和19沒有別的因數了,所以排除24
對於25來說:  25可以寫成是:2+23它們的乘積是46,但是46在2到99之間除了2和23沒有別的因數了,所以排除25
對於26來說:  26可以寫成是:3+23它們的乘積是69,但是69在2到99之間除了3和23沒有別的因數了,所以排除26
對於27來說:  27的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於28來說:  28可以寫成是:5+23它們的乘積是115,但是115在2到99之間除了5和23沒有別的因數了,所以排除28
對於29來說:  29的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於30來說:  30可以寫成是:5+25它們的乘積是125,但是125在2到99之間除了5和25沒有別的因數了,所以排除30
對於31來說:  31可以寫成是:2+29它們的乘積是58,但是58在2到99之間除了2和29沒有別的因數了,所以排除31
對於32來說:  32可以寫成是:3+29它們的乘積是87,但是87在2到99之間除了3和29沒有別的因數了,所以排除32
對於33來說:  33可以寫成是:2+31它們的乘積是62,但是62在2到99之間除了2和31沒有別的因數了,所以排除33
對於34來說:  34可以寫成是:3+31它們的乘積是93,但是93在2到99之間除了3和31沒有別的因數了,所以排除34
對於35來說:  35的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於36來說:  36可以寫成是:5+31它們的乘積是155,但是155在2到99之間除了5和31沒有別的因數了,所以排除36
對於37來說:  37的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於38來說:  38可以寫成是:7+31它們的乘積是217,但是217在2到99之間除了7和31沒有別的因數了,所以排除38
對於39來說:  39可以寫成是:2+37它們的乘積是74,但是74在2到99之間除了2和37沒有別的因數了,所以排除39
對於40來說:  40可以寫成是:3+37它們的乘積是111,但是111在2到99之間除了3和37沒有別的因數了,所以排除40
對於41來說:  41的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於42來說:  42可以寫成是:5+37它們的乘積是185,但是185在2到99之間除了5和37沒有別的因數了,所以排除42
對於43來說:  43可以寫成是:2+41它們的乘積是82,但是82在2到99之間除了2和41沒有別的因數了,所以排除43
對於44來說:  44可以寫成是:3+41它們的乘積是123,但是123在2到99之間除了3和41沒有別的因數了,所以排除44
對於45來說:  45可以寫成是:2+43它們的乘積是86,但是86在2到99之間除了2和43沒有別的因數了,所以排除45
對於46來說:  46可以寫成是:3+43它們的乘積是129,但是129在2到99之間除了3和43沒有別的因數了,所以排除46
對於47來說:  47的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於48來說:  48可以寫成是:5+43它們的乘積是215,但是215在2到99之間除了5和43沒有別的因數了,所以排除48
對於49來說:  49可以寫成是:2+47它們的乘積是94,但是94在2到99之間除了2和47沒有別的因數了,所以排除49
對於50來說:  50可以寫成是:3+47它們的乘積是141,但是141在2到99之間除了3和47沒有別的因數了,所以排除50
對於51來說:  51可以寫成是:17+34它們的乘積是578,但是578在2到99之間除了17和34沒有別的因數了,所以排除51
對於52來說:  52可以寫成是:5+47它們的乘積是235,但是235在2到99之間除了5和47沒有別的因數了,所以排除52
對於53來說:  53的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下
對於54來說:  54可以寫成是:7+47它們的乘積是329,但是329在2到99之間除了7和47沒有別的因數了,所以排除54
對於55來說:  55可以寫成是:2+53它們的乘積是106,但是106在2到99之間除了2和53沒有別的因數了,所以排除55
對於56來說:  56可以寫成是:3+53它們的乘積是159,但是159在2到99之間除了3和53沒有別的因數了,所以排除56
對於57來說:  57可以寫成是:4+53它們的乘積是212,但是212在2到99之間除了4和53沒有別的因數了,所以排除57
對於58來說:  58可以寫成是:5+53它們的乘積是265,但是265在2到99之間除了5和53沒有別的因數了,所以排除58
對於59來說:  59可以寫成是:6+53它們的乘積是318,但是318在2到99之間除了6和53沒有別的因數了,所以排除59
對於60來說:  60可以寫成是:7+53它們的乘積是371,但是371在2到99之間除了7和53沒有別的因數了,所以排除60
對於61來說:  61可以寫成是:2+59它們的乘積是118,但是118在2到99之間除了2和59沒有別的因數了,所以排除61
對於62來說:  62可以寫成是:3+59它們的乘積是177,但是177在2到99之間除了3和59沒有別的因數了,所以排除62
對於63來說:  63可以寫成是:2+61它們的乘積是122,但是122在2到99之間除了2和61沒有別的因數了,所以排除63
對於64來說:  64可以寫成是:3+61它們的乘積是183,但是183在2到99之間除了3和61沒有別的因數了,所以排除64
對於65來說:  65可以寫成是:4+61它們的乘積是244,但是244在2到99之間除了4和61沒有別的因數了,所以排除65
對於66來說:  66可以寫成是:5+61它們的乘積是305,但是305在2到99之間除了5和61沒有別的因數了,所以排除66
對於67來說:  67可以寫成是:6+61它們的乘積是366,但是366在2到99之間除了6和61沒有別的因數了,所以排除67
對於68來說:  68可以寫成是:7+61它們的乘積是427,但是427在2到99之間除了7和61沒有別的因數了,所以排除68
對於69來說:  69可以寫成是:2+67它們的乘積是134,但是134在2到99之間除了2和67沒有別的因數了,所以排除69
對於70來說:  70可以寫成是:3+67它們的乘積是201,但是201在2到99之間除了3和67沒有別的因數了,所以排除70
對於71來說:  71可以寫成是:4+67它們的乘積是268,但是268在2到99之間除了4和67沒有別的因數了,所以排除71
對於72來說:  72可以寫成是:5+67它們的乘積是335,但是335在2到99之間除了5和67沒有別的因數了,所以排除72
對於73來說:  73可以寫成是:2+71它們的乘積是142,但是142在2到99之間除了2和71沒有別的因數了,所以排除73
對於74來說:  74可以寫成是:3+71它們的乘積是213,但是213在2到99之間除了3和71沒有別的因數了,所以排除74
對於75來說:  75可以寫成是:2+73它們的乘積是146,但是146在2到99之間除了2和73沒有別的因數了,所以排除75
對於76來說:  76可以寫成是:3+73它們的乘積是219,但是219在2到99之間除了3和73沒有別的因數了,所以排除76
對於77來說:  77可以寫成是:4+73它們的乘積是292,但是292在2到99之間除了4和73沒有別的因數了,所以排除77
對於78來說:  78可以寫成是:5+73它們的乘積是365,但是365在2到99之間除了5和73沒有別的因數了,所以排除78
對於79來說:  79可以寫成是:6+73它們的乘積是438,但是438在2到99之間除了6和73沒有別的因數了,所以排除79
對於80來說:  80可以寫成是:7+73它們的乘積是511,但是511在2到99之間除了7和73沒有別的因數了,所以排除80
對於81來說:  81可以寫成是:2+79它們的乘積是158,但是158在2到99之間除了2和79沒有別的因數了,所以排除81
對於82來說:  82可以寫成是:3+79它們的乘積是237,但是237在2到99之間除了3和79沒有別的因數了,所以排除82
對於83來說:  83可以寫成是:4+79它們的乘積是316,但是316在2到99之間除了4和79沒有別的因數了,所以排除83
對於84來說:  84可以寫成是:5+79它們的乘積是395,但是395在2到99之間除了5和79沒有別的因數了,所以排除84
對於85來說:  85可以寫成是:2+83它們的乘積是166,但是166在2到99之間除了2和83沒有別的因數了,所以排除85
對於86來說:  86可以寫成是:3+83它們的乘積是249,但是249在2到99之間除了3和83沒有別的因數了,所以排除86
對於87來說:  87可以寫成是:4+83它們的乘積是332,但是332在2到99之間除了4和83沒有別的因數了,所以排除87
對於88來說:  88可以寫成是:5+83它們的乘積是415,但是415在2到99之間除了5和83沒有別的因數了,所以排除88
對於89來說:  89可以寫成是:6+83它們的乘積是498,但是498在2到99之間除了6和83沒有別的因數了,所以排除89
對於90來說:  90可以寫成是:7+83它們的乘積是581,但是581在2到99之間除了7和83沒有別的因數了,所以排除90
對於91來說:  91可以寫成是:2+89它們的乘積是178,但是178在2到99之間除了2和89沒有別的因數了,所以排除91
對於92來說:  92可以寫成是:3+89它們的乘積是267,但是267在2到99之間除了3和89沒有別的因數了,所以排除92
對於93來說:  93可以寫成是:4+89它們的乘積是356,但是356在2到99之間除了4和89沒有別的因數了,所以排除93
對於94來說:  94可以寫成是:5+89它們的乘積是445,但是445在2到99之間除了5和89沒有別的因數了,所以排除94
對於95來說:  95可以寫成是:6+89它們的乘積是534,但是534在2到99之間除了6和89沒有別的因數了,所以排除95
對於96來說:  96可以寫成是:7+89它們的乘積是623,但是623在2到99之間除了7和89沒有別的因數了,所以排除96
對於97來說:  97可以寫成是:8+89它們的乘積是712,但是712在2到99之間除了8和89沒有別的因數了,所以排除97
對於98來說:  98可以寫成是:9+89它們的乘積是801,但是801在2到99之間除了9和89沒有別的因數了,所以排除98
對於99來說:  99可以寫成是:2+97它們的乘積是194,但是194在2到99之間除了2和97沒有別的因數了,所以排除99
對於100來說:  100可以寫成是:3+97它們的乘積是291,但是291在2到99之間除了3和97沒有別的因數了,所以排除100
對於101來說:  101可以寫成是:4+97它們的乘積是388,但是388在2到99之間除了4和97沒有別的因數了,所以排除101
對於102來說:  102可以寫成是:5+97它們的乘積是485,但是485在2到99之間除了5和97沒有別的因數了,所以排除102
對於103來說:  103可以寫成是:6+97它們的乘積是582,但是582在2到99之間除了6和97沒有別的因數了,所以排除103
對於104來說:  104可以寫成是:7+97它們的乘積是679,但是679在2到99之間除了7和97沒有別的因數了,所以排除104
對於105來說:  105可以寫成是:8+97它們的乘積是776,但是776在2到99之間除了8和97沒有別的因數了,所以排除105
對於106來說:  106可以寫成是:9+97它們的乘積是873,但是873在2到99之間除了9和97沒有別的因數了,所以排除106
對於107來說:  107可以寫成是:10+97它們的乘積是970,但是970在2到99之間除了10和97沒有別的因數了,所以排除107
對於108來說:  108可以寫成是:11+97它們的乘積是1067,但是1067在2到99之間除了11和97沒有別的因數了,所以排除108
對於109來說:  109可以寫成是:12+97它們的乘積是1164,但是1164在2到99之間除了12和97沒有別的因數了,所以排除109
對於110來說:  110可以寫成是:13+97它們的乘積是1261,但是1261在2到99之間除了13和97沒有別的因數了,所以排除110
對於111來說:  111可以寫成是:14+97它們的乘積是1358,但是1358在2到99之間除了14和97沒有別的因數了,所以排除111
對於112來說:  112可以寫成是:15+97它們的乘積是1455,但是1455在2到99之間除了15和97沒有別的因數了,所以排除112
對於113來說:  113可以寫成是:16+97它們的乘積是1552,但是1552在2到99之間除了16和97沒有別的因數了,所以排除113
對於114來說:  114可以寫成是:17+97它們的乘積是1649,但是1649在2到99之間除了17和97沒有別的因數了,所以排除114
對於115來說:  115可以寫成是:18+97它們的乘積是1746,但是1746在2到99之間除了18和97沒有別的因數了,所以排除115
對於116來說:  116可以寫成是:19+97它們的乘積是1843,但是1843在2到99之間除了19和97沒有別的因數了,所以排除116
對於117來說:  117可以寫成是:20+97它們的乘積是1940,但是1940在2到99之間除了20和97沒有別的因數了,所以排除117
對於118來說:  118可以寫成是:21+97它們的乘積是2037,但是2037在2到99之間除了21和97沒有別的因數了,所以排除118
對於119來說:  119可以寫成是:22+97它們的乘積是2134,但是2134在2到99之間除了22和97沒有別的因數了,所以排除119
對於120來說:  120可以寫成是:23+97它們的乘積是2231,但是2231在2到99之間除了23和97沒有別的因數了,所以排除120
對於121來說:  121可以寫成是:24+97它們的乘積是2328,但是2328在2到99之間除了24和97沒有別的因數了,所以排除121
對於122來說:  122可以寫成是:25+97它們的乘積是2425,但是2425在2到99之間除了25和97沒有別的因數了,所以排除122
對於123來說:  123可以寫成是:26+97它們的乘積是2522,但是2522在2到99之間除了26和97沒有別的因數了,所以排除123
對於124來說:  124可以寫成是:27+97它們的乘積是2619,但是2619在2到99之間除了27和97沒有別的因數了,所以排除124
對於125來說:  125可以寫成是:28+97它們的乘積是2716,但是2716在2到99之間除了28和97沒有別的因數了,所以排除125
對於126來說:  126可以寫成是:29+97它們的乘積是2813,但是2813在2到99之間除了29和97沒有別的因數了,所以排除126
對於127來說:  127可以寫成是:30+97它們的乘積是2910,但是2910在2到99之間除了30和97沒有別的因數了,所以排除127
對於128來說:  128可以寫成是:31+97它們的乘積是3007,但是3007在2到99之間除了31和97沒有別的因數了,所以排除128
對於129來說:  129可以寫成是:32+97它們的乘積是3104,但是3104在2到99之間除了32和97沒有別的因數了,所以排除129
對於130來說:  130可以寫成是:33+97它們的乘積是3201,但是3201在2到99之間除了33和97沒有別的因數了,所以排除130
對於131來說:  131可以寫成是:34+97它們的乘積是3298,但是3298在2到99之間除了34和97沒有別的因數了,所以排除131
對於132來說:  132可以寫成是:33+99它們的乘積是3267,但是3267在2到99之間除了33和99沒有別的因數了,所以排除132
對於133來說:  133可以寫成是:36+97它們的乘積是3492,但是3492在2到99之間除了36和97沒有別的因數了,所以排除133
對於134來說:  134可以寫成是:37+97它們的乘積是3589,但是3589在2到99之間除了37和97沒有別的因數了,所以排除134
對於135來說:  135可以寫成是:38+97它們的乘積是3686,但是3686在2到99之間除了38和97沒有別的因數了,所以排除135
對於136來說:  136可以寫成是:37+99它們的乘積是3663,但是3663在2到99之間除了37和99沒有別的因數了,所以排除136
對於137來說:  137可以寫成是:40+97它們的乘積是3880,但是3880在2到99之間除了40和97沒有別的因數了,所以排除137
對於138來說:  138可以寫成是:39+99它們的乘積是3861,但是3861在2到99之間除了39和99沒有別的因數了,所以排除138
對於139來說:  139可以寫成是:42+97它們的乘積是4074,但是4074在2到99之間除了42和97沒有別的因數了,所以排除139
對於140來說:  140可以寫成是:41+99它們的乘積是4059,但是4059在2到99之間除了41和99沒有別的因數了,所以排除140
對於141來說:  141可以寫成是:44+97它們的乘積是4268,但是4268在2到99之間除了44和97沒有別的因數了,所以排除141
對於142來說:  142可以寫成是:43+99它們的乘積是4257,但是4257在2到99之間除了43和99沒有別的因數了,所以排除142
對於143來說:  143可以寫成是:46+97它們的乘積是4462,但是4462在2到99之間除了46和97沒有別的因數了,所以排除143
對於144來說:  144可以寫成是:47+97它們的乘積是4559,但是4559在2到99之間除了47和97沒有別的因數了,所以排除144
對於145來說:  145可以寫成是:48+97它們的乘積是4656,但是4656在2到99之間除了48和97沒有別的因數了,所以排除145
對於146來說:  146可以寫成是:47+99它們的乘積是4653,但是4653在2到99之間除了47和99沒有別的因數了,所以排除146
對於147來說:  147可以寫成是:49+98它們的乘積是4802,但是4802在2到99之間除了49和98沒有別的因數了,所以排除147
對於148來說:  148可以寫成是:51+97它們的乘積是4947,但是4947在2到99之間除了51和97沒有別的因數了,所以排除148
對於149來說:  149可以寫成是:51+98它們的乘積是4998,但是4998在2到99之間除了51和98沒有別的因數了,所以排除149
對於150來說:  150可以寫成是:51+99它們的乘積是5049,但是5049在2到99之間除了51和99沒有別的因數了,所以排除150
對於151來說:  151可以寫成是:53+98它們的乘積是5194,但是5194在2到99之間除了53和98沒有別的因數了,所以排除151
對於152來說:  152可以寫成是:53+99它們的乘積是5247,但是5247在2到99之間除了53和99沒有別的因數了,所以排除152
對於153來說:  153可以寫成是:56+97它們的乘積是5432,但是5432在2到99之間除了56和97沒有別的因數了,所以排除153
對於154來說:  154可以寫成是:55+99它們的乘積是5445,但是5445在2到99之間除了55和99沒有別的因數了,所以排除154
對於155來說:  155可以寫成是:57+98它們的乘積是5586,但是5586在2到99之間除了57和98沒有別的因數了,所以排除155
對於156來說:  156可以寫成是:57+99它們的乘積是5643,但是5643在2到99之間除了57和99沒有別的因數了,所以排除156
對於157來說:  157可以寫成是:59+98它們的乘積是5782,但是5782在2到99之間除了59和98沒有別的因數了,所以排除157
對於158來說:  158可以寫成是:59+99它們的乘積是5841,但是5841在2到99之間除了59和99沒有別的因數了,所以排除158
對於159來說:  159可以寫成是:61+98它們的乘積是5978,但是5978在2到99之間除了61和98沒有別的因數了,所以排除159
對於160來說:  160可以寫成是:61+99它們的乘積是6039,但是6039在2到99之間除了61和99沒有別的因數了,所以排除160
對於161來說:  161可以寫成是:63+98它們的乘積是6174,但是6174在2到99之間除了63和98沒有別的因數了,所以排除161
對於162來說:  162可以寫成是:64+98它們的乘積是6272,但是6272在2到99之間除了64和98沒有別的因數了,所以排除162
對於163來說:  163可以寫成是:66+97它們的乘積是6402,但是6402在2到99之間除了66和97沒有別的因數了,所以排除163
對於164來說:  164可以寫成是:65+99它們的乘積是6435,但是6435在2到99之間除了65和99沒有別的因數了,所以排除164
對於165來說:  165可以寫成是:66+99它們的乘積是6534,但是6534在2到99之間除了66和99沒有別的因數了,所以排除165
對於166來說:  166可以寫成是:67+99它們的乘積是6633,但是6633在2到99之間除了67和99沒有別的因數了,所以排除166
對於167來說:  167可以寫成是:68+99它們的乘積是6732,但是6732在2到99之間除了68和99沒有別的因數了,所以排除167
對於168來說:  168可以寫成是:69+99它們的乘積是6831,但是6831在2到99之間除了69和99沒有別的因數了,所以排除168
對於169來說:  169可以寫成是:71+98它們的乘積是6958,但是6958在2到99之間除了71和98沒有別的因數了,所以排除169
對於170來說:  170可以寫成是:71+99它們的乘積是7029,但是7029在2到99之間除了71和99沒有別的因數了,所以排除170
對於171來說:  171可以寫成是:73+98它們的乘積是7154,但是7154在2到99之間除了73和98沒有別的因數了,所以排除171
對於172來說:  172可以寫成是:73+99它們的乘積是7227,但是7227在2到99之間除了73和99沒有別的因數了,所以排除172
對於173來說:  173可以寫成是:74+99它們的乘積是7326,但是7326在2到99之間除了74和99沒有別的因數了,所以排除173
對於174來說:  174可以寫成是:75+99它們的乘積是7425,但是7425在2到99之間除了75和99沒有別的因數了,所以排除174
對於175來說:  175可以寫成是:76+99它們的乘積是7524,但是7524在2到99之間除了76和99沒有別的因數了,所以排除175
對於176來說:  176可以寫成是:77+99它們的乘積是7623,但是7623在2到99之間除了77和99沒有別的因數了,所以排除176
對於177來說:  177可以寫成是:78+99它們的乘積是7722,但是7722在2到99之間除了78和99沒有別的因數了,所以排除177
對於178來說:  178可以寫成是:79+99它們的乘積是7821,但是7821在2到99之間除了79和99沒有別的因數了,所以排除178
對於179來說:  179可以寫成是:81+98它們的乘積是7938,但是7938在2到99之間除了81和98沒有別的因數了,所以排除179
對於180來說:  180可以寫成是:81+99它們的乘積是8019,但是8019在2到99之間除了81和99沒有別的因數了,所以排除180
對於181來說:  181可以寫成是:82+99它們的乘積是8118,但是8118在2到99之間除了82和99沒有別的因數了,所以排除181
對於182來說:  182可以寫成是:83+99它們的乘積是8217,但是8217在2到99之間除了83和99沒有別的因數了,所以排除182
對於183來說:  183可以寫成是:84+99它們的乘積是8316,但是8316在2到99之間除了84和99沒有別的因數了,所以排除183
對於184來說:  184可以寫成是:85+99它們的乘積是8415,但是8415在2到99之間除了85和99沒有別的因數了,所以排除184
對於185來說:  185可以寫成是:86+99它們的乘積是8514,但是8514在2到99之間除了86和99沒有別的因數了,所以排除185
對於186來說:  186可以寫成是:87+99它們的乘積是8613,但是8613在2到99之間除了87和99沒有別的因數了,所以排除186
對於187來說:  187可以寫成是:88+99它們的乘積是8712,但是8712在2到99之間除了88和99沒有別的因數了,所以排除187
對於188來說:  188可以寫成是:89+99它們的乘積是8811,但是8811在2到99之間除了89和99沒有別的因數了,所以排除188
對於189來說:  189可以寫成是:90+99它們的乘積是8910,但是8910在2到99之間除了90和99沒有別的因數了,所以排除189
對於190來說:  190可以寫成是:91+99它們的乘積是9009,但是9009在2到99之間除了91和99沒有別的因數了,所以排除190
對於191來說:  191可以寫成是:92+99它們的乘積是9108,但是9108在2到99之間除了92和99沒有別的因數了,所以排除191
對於192來說:  192可以寫成是:93+99它們的乘積是9207,但是9207在2到99之間除了93和99沒有別的因數了,所以排除192
對於193來說:  193可以寫成是:94+99它們的乘積是9306,但是9306在2到99之間除了94和99沒有別的因數了,所以排除193
對於194來說:  194可以寫成是:95+99它們的乘積是9405,但是9405在2到99之間除了95和99沒有別的因數了,所以排除194
對於195來說:  195可以寫成是:96+99它們的乘積是9504,但是9504在2到99之間除了96和99沒有別的因數了,所以排除195
對於196來說:  196可以寫成是:97+99它們的乘積是9603,但是9603在2到99之間除了97和99沒有別的因數了,所以排除196
對於197來說:  197可以寫成是:98+99它們的乘積是9702,但是9702在2到99之間除了98和99沒有別的因數了,所以排除197
此時還剩下這幾個數:11,17,23,27,29,35,37,41,47,53,剩下的數的拆開的任意兩個加數的乘積都可在2到99之間找到另外的兩個乘數
到現在爲止我們是在聽了龐涓的我不知汝亦不知後做的推理
然後孫斌聽了後說他知道了,說明孫臏手中的乘積所有的分解情況中因子加起來是剩下的10個數之一且只有一個,此時我們打印出如下的表:
11是
17是 18(1)  24(1)  28(1)  30(3)  30(3)  42(2)  52(1)  60(2)  66(2)  70(2)  72(3) 
23是 42(2)  60(2)  76(1)  90(2)  102(3)  112(1)  120(2)  126(2)  130(1)  132(4) 
27是 50(1)  72(3)  92(1)  110(1)  126(2)  140(1)  152(1)  162(1)  170(1)  176(1)  180(3)  182(2) 
29是 54(1)  78(2)  100(1)  120(2)  138(1)  154(1)  168(1)  180(3)  190(1)  198(1)  204(1)  208(1)  210(5) 
35是 66(2)  96(1)  124(1)  150(2)  174(1)  196(2)  216(1)  234(1)  250(1)  264(2)  276(1)  286(2)  294(1)  300(2)  304(1)  306(2) 
37是 70(2)  102(3)  132(4)  160(1)  186(1)  210(5)  232(1)  252(1)  270(1)  286(2)  300(2)  312(2)  322(2)  330(2)  336(1)  340(1)  342(3) 
41是 78(2)  114(1)  148(1)  180(3)  210(5)  238(1)  264(2)  288(1)  310(1)  330(2)  348(1)  364(1)  378(1)  390(1)  400(1)  408(1)  414(1)  418(1)  420(3) 
47是 90(2)  132(4)  172(1)  210(5)  246(1)  280(1)  312(2)  342(3)  370(1)  396(2)  420(3)  442(1)  462(2)  480(1)  496(1)  510(1)  522(1)  532(1)  540(1)  546(2)  550(1)  552(2) 
53是 102(3)  150(2)  196(2)  240(1)  282(1)  322(2)  360(1)  396(2)  430(1)  462(2)  492(1)  520(1)  546(2)  570(1)  592(1)  612(1)  630(1)  646(1)  660(1)  672(1)  682(1)  690(1)  696(1)  700(1)  702(2) 
於是我們知道孫臏手中的積可能是130 390 646 520 138 522 140 270 400 18 276 148 532 660 24 152 408 280 154 282 28 540 414 160 288 672 162 418 294 550 168 170 682 172 174 430 176 304 50 690 52 54 310 696 186 442 570 700 190 198 76 204 208 336 592 340 216 92 348 96 480 100 612 232 360 234 364 492 110 238 112 496 240 114 370 246 630 250 378 124 252 510 
注意這裏的可能,對於孫臏來說他就能確定,因爲他知道的條件要比我們多比如如果是18,孫就會知道這兩個數是2和9,而不是3和6,因爲3+6=9,而9早就排除了
然後龐涓說他知道了,證明所有龐涓手中的和拆出來的加數的乘積在這10個數中只有這一種可能的只有一個
比如如果龐手中是11,那麼在聽到孫的說法後,他只能猜到是18,24或者28,而不能確定
可以發現括號裏是1的只有一個的行只有17那一行,別的行都有兩個或更多比如11那一行有三個:18(1)  24(1)  28(1)
所以龐涓手中的和是17,孫臏手中的積是52.由此這兩個數是13和4

 

下邊是生成以上解答的代碼:

請大家看一下吧。
 

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class MyClass {
	public static List<Integer> deleteList = new ArrayList<>();

	public static void step1(final int n) {
		boolean isHave = false;
		for (int i = 2; i < 100; i++) {
			isHave=false;
			int a1 = i;
			int a2 = n - i;
			int a3 = a1 * a2;
			if (a2 > 99) {
				continue;
			}
			
			int another = 0;
			for (int j = 2; j < 100; j++) {
				if (j == a1 || j == a2 || j == a3) {
					continue;
				}
				if (a3 % j == 0 && a3 / j < 100) {
					another = j;
					isHave = true;
					break;
				}
			}
			if (!isHave) {
				
				
				System.out.println("對於" + n + "來說:  "+n + "可以寫成是:" + a1 + "+" + a2 + "它們的乘積是" + a3 + ","+"但是" + a3 + "在2到99之間除了" + a1 + "和" + a2 + "沒有別的因數了,所以排除" + n);
				deleteList.add(n);
				break;
			}else {
				
			}
          }
		if(isHave) {
		
		System.out.println("對於" + n + "來說:  "+n+"的所有加數的乘積在2到99之間都能找到其他的不同因數,所以留下");
	    
	}else {
		
	}

	}

	public static void removeNum(List<Integer> l, int value) {
		for (int i = 0; i < l.size(); i++) {
			if (l.get(i) == value) {
				l.remove(i);
			}

		}
	}

	public static int countPlus(int value) {
		int result = 0;
		for (int i = 0; i < sumResults.size(); i++) {
			for (int j = 2; j <= (sumResults.get(i) + 1) / 2; j++) {
				if (j * (sumResults.get(i) - j) == value) {
					result++;
				}

			}

		}
		return result;
	}

	public static List<Integer> nums = new ArrayList<>();
	public static List<Integer> sumResults = new ArrayList<>();

	public static void main(String[] args) {

		for (int i = 2; i < 100; i++) {
			nums.add(i);
		}
		for (int i = 5; i < 198; i++) {
			sumResults.add(i);

		}
		System.out.println("2到99的不同整數的和是從5到197");
		System.out.println(
				"龐涓肯定孫斌不知道,我們可以得出龐涓的數字不能是5或者6,因爲如果是5的話,根據題意兩個不同的正整數兩個數只能是2和3\n如果是6,孫斌肯定知道。6只能是2和4,孫斌手中是8,他也能知道");
		sumResults.remove(1);
		sumResults.remove(0);

		System.out.println("還有就是龐涓手中的數拆成兩個數的話,兩個數產生的積,還可以在2到99之間找到另外的兩個數滿足,所以孫斌不能確定,下邊進行一一的排除:");
		for (int i = 0; i < sumResults.size(); i++) {
//			try {
//				Thread.sleep(1000);
//			} catch (InterruptedException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
			
			
			step1(sumResults.get(i));
		}
		for (int i = 0; i < deleteList.size(); i++) {
			removeNum(sumResults, deleteList.get(i));

		}
		System.out.print("此時還剩下這幾個數:");
		for (int i = 0; i < sumResults.size(); i++) {
			System.out.print(sumResults.get(i) + ",");

		}
		System.out.println("剩下的數的拆開的任意兩個加數的乘積都可在2到99之間找到另外的兩個乘數");
		System.out.println("到現在爲止我們是在聽了龐涓的我不知汝亦不知後做的推理");
		System.out.println("然後孫斌聽了後說他知道了,說明孫臏手中的乘積所有的分解情況中因子加起來是剩下的10個數之一且只有一個,此時我們打印出如下的表:");
		Set<Integer> products = new HashSet<>();
		for (int i = 0; i < sumResults.size(); i++) {
			for (int j = 2; j < sumResults.get(i) - 1; j++) {

				products.add(j * (sumResults.get(i) - j));

			}
		}

		List<ProductModel> ps = new ArrayList<>();
		for (Integer productModel : products) {
			ProductModel p = new ProductModel();
			p.setProduct(productModel);
			p.setCount(0);
			ps.add(p);
		}
		Set<Integer> cafterSun = new HashSet<>();
		for (int i = 0; i < sumResults.size(); i++) {
			System.out.print(sumResults.get(i) + "是");
			for (int j = 2; j < (sumResults.get(i) + 1) / 2; j++) {
				System.err
						.print(" " + j * (sumResults.get(i) - j) + "(" + countPlus(j * (sumResults.get(i) - j)) + ") ");
				if (countPlus(j * (sumResults.get(i) - j)) == 1) {
					cafterSun.add(j * (sumResults.get(i) - j));
				}
			}
			System.out.println();
		}
		System.out.print("於是我們知道孫臏手中的積可能是");
		for (Integer integer : cafterSun) {
			System.out.print(integer + " ");
		}
		System.out.println();
		System.out.print("注意這裏的可能,對於孫臏來說他就能確定,因爲他知道的條件要比我們多");
		System.out.print("比如如果是18,孫就會知道這兩個數是2和9,而不是3和6,因爲3+6=9,而9早就排除了");
		System.out.println();
		System.out.println("然後龐涓說他知道了,證明所有龐涓手中的和拆出來的加數的乘積在這10個數中只有這一種可能的只有一個");
		System.out.println("比如如果龐手中是11,那麼在聽到孫的說法後,他只能猜到是18,24或者28,而不能確定");
		System.out.println("可以發現括號裏是1的只有一個的行只有17那一行,別的行都有兩個或更多比如11那一行有三個:18(1)  24(1)  28(1)");
		System.out.println("所以龐涓手中的和是17,孫臏手中的積是52.由此這兩個數是13和4");
	}

	public static class ProductModel {
		Integer product;
		Integer count;

		public Integer getProduct() {
			return product;
		}

		public void setProduct(Integer product) {
			this.product = product;
		}

		public Integer getCount() {
			return count;
		}

		public void setCount(Integer count) {
			this.count = count;
		}

	}
}

 

   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章