有书友在留言区要求老夏贴出“鬼谷子算”的解法。老夏就搜罗几种解法贴出来,和书友共享
解题思路1:
假设数为x,y;和为x+y=a,积为x*y=b.
根据庞第一次所说的:“我肯定你也不知道这两个数是什么”。由此知道,x+y不是两个素数之和。那么a的可能11,17,23,27,29,35,37,41,47,51,53,57,59,65,67,71,77,79,83,87,89,95,97.
我们再计算一下b的可能值:
和是11能得到的积:18,24,28,30
和是17能得到的积:30,42,52,60,66,70,72
和是23能得到的积:42,60...
和是27能得到的积:50,72...
和是29能得到的积:...
和是35能得到的积:66...
和是37能得到的积:70...
......
我们可以得出可能的b为....,当然了,有些数(30=5*6=2*15)出现不止一次。
这时候,孙依据自己的数比较计算后,“我现在能够确定这两个数字了。”
我们依据这句话,和我们算出来的b的集合,我们又可以把计算出来的b的集合删除一些重复数。
和是11能得到的积:18,24,28
和是17能得到的积:52
和是23能得到的积:42,76...
和是27能得到的积:50,92...
和是29能得到的积:54,78...
和是35能得到的积:96,124...
和是37能得到的积:,...
......
因为庞说:“既然你这么说,我现在也知道这两个数字是什么了。”那么由和得出的积也必须是唯一的,由上面知道只有一行是剩下一个数的,那就是和17积52。那么x和y分别是4和13。
解题思路2:
说话依次编号为s1,p1,s2。
设这两个数为x,y,和为s,积为p。
由s1,p不知道这两个数,所以s不可能是两个质数相加得来的,而且s<=41,因为如果s>41,那么p拿到41x(s-41)必定可以猜出s了(关于这一点,参考老马的证明,这一点很巧妙,可以省不少事情)。所以和s为{11,17,23,27,29,35,37,41}之一,设这个集合为a。
1).假设和是11。11=2+9=3+8=4+7=5+6,如果p拿到18,18=3x6=2x9,只有2+9落在集合a中,所以p可以说出p1,但是这时候s能不能说出s2呢?我们来看,如果p拿到24,24=6x4=3x8=2x12,p同样可以说p1,因为至少有两种情况p都可以说出p1,所以a就无法断言s2,所以和不是11。
2).假设和是17。17=2+15=3+14=4+13=5+12=6+11=7+10=8+9,很明显,由于p拿到4x13可以断言p1,而其他情况,p都无法断言p1,所以和是17。
3).假设和是23。23=2+21=3+20=4+19=5+18=6+17=7+16=8+15=9+14=10+13=11+12,咱们先考虑含有2的n次幂或者含有大质数的那些组,如果p拿到4x19或7x16都可以断言p1,所以和不是23。
4).假设和是27。如果p拿到8x19或4x23都可以断言p1,所以和不是27。
5).假设和是29。如果p拿到13x16或7x22都可以断言p1,所以和不是29。
6).假设和是35。如果p拿到16x19或4x31都可以断言p1,所以和