关于鬼谷子的数学推理题

    之前在网上看到一个小学奥数级别的题目如下:

一天鬼出了这道题目:他从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;
		}

	}
}

 

   

 

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值