庞孙和积
题目:一天,鬼谷子随意从2-99中选取了两个数。他把这两个数的和告诉了庞涓, 把这两个数的乘积告诉了孙膑。但孙膑和庞涓彼此不知到对方得到的数。第二天, 庞涓很有自信的对孙膑说:虽然我不知到这两个数是什麽,但我知道你一定也不知 道。随后,孙膑说:我知道了。庞涓说:我也知道了。请问:这两个数是什麽?
想要解决这道题,就必须不断地转化角度,从两者的角度出发,来判断每一句话的背后所涵盖的信息。
1) 鬼谷子说,数字为2-99中的两个,其和给庞涓,其积给孙膑。
庞涓得到 sum = A + B;
孙膑得到 multi = A * B ;
2) 庞涓说,他不知道这两个数是什么,但我知道你一定也不知道
就是说,虽然sum拆分成不同的两个数字有很多种可能,而所有这些可能中,其两数乘积,无法分割成唯一的情形。
例如,sum为14,设A B为3,11。 则积为33。 33为两质数之和,如果孙膑拿到的积是这个数字,则他必能求出答案。庞涓如此笃定孙膑无法知道答案,则就是说庞涓所拿到的sum必不会分解成两个质数,或两个阈值内确定的数字【1】(例如84和97,因为其积为8148,孙膑如果使用穷举法进行分解,虽然质因数的个数超过两个,但其符合范围的分解只有一种)。因此庞涓拿的数字肯定不是14。
由此就能遍历所有可能的“和数”范围 [5,197] ,只要“和数”的所有分解A+B,都不会使A,B成为上述的两个质因数,或两个阈值内确定数字的情况。
伪代码如下:
1 For sum as [5,197] { 2 For (A+B) = sum{ 3 If( isStatic(A,B) ) break; 4 } 5 Else addToSumList(sum); 6 }
如此一来,遍历过后,发现共有84个符合庞涓和数的sum
3) 孙膑之后说,他本来不知道,但现在知道了。
孙膑对他所拿到的积也进行推理,发现分解成的质因数的个数的确大于两个。他不知道答案,这是理所当然的,这一点庞涓就已经做过推测了。
但自从庞涓说了那句话之后,就透露出信息了(庞涓的数字在那84个范围内的一个)。孙膑透过这个信息,结合自己的数字进行推理,结果就找到答案。孙膑的积能够分成不同的两数字,所有的分解情况下的两个数字,其和只有一个是符合那84个可能值,否则孙膑也无法透过这些信息找出答案。
4) 最后,庞涓说他也知道了。其实他透过类似的分析,由孙膑的角度出发,发现了这一个数字规律,解决了问题。虽然我们并无掌握任何一个数字,但是能够推测出满足这样一个逻辑规律的数字对,只有一组<4,13>。即其和积对为<17,52>。
其实这个问题的关键在于鬼谷子在选择数字的时候,巧妙地将两个数字规定在一个阈值范围之内。否则,应该会出现很多不同的情况。
PS:
【1】之前有网上的解法链接为http://blog.csdn.net/lonelysky/article/details/5349108。其中说到和数不能为偶,奇数也不能大于53。这样的说法正确,但不具备通用性。如果想研究阈值大于99的数,这样描述就不正确。合理的说法是,和数分解后的两因子,无法使用“乘除”运算,变化成阈值内另外的一对因子了。这样的说法就能统一质因数,和奇数小于53的两种情况。

浙公网安备 33010602011771号