题目如下:
有两个大于1小于100的自然数x,y,老师告诉小明两个数的和,告诉小强两个数的积。已知小明和小强足够聪明。
下面是两个人的对话:
小强:我不知道这两个数是多少。(<沉默中>...)
小明:我知道你不知道。(我不知道这两个数是多少,而且你也不知道。)
小强:那我知道了。(你说的对,不过我现在知道了。)
小明:那我也知道啦。(额...那我也知道啦。)
问这两个数是多少?
PS:个人觉得对话改成小括号里面的也是一样的,对解题逻辑没有影响。
下面是我们的逻辑链条:
step1 "小强:我不知道这两个数是多少。"
常理来说,只给两个自然数x,y之积,小强有很大概率不知道这两个数是多少。但也有一些情况小强会知道,比方说这个积是21(只能分解为两个素数,那么这两个数只能是3和7);或者是25(这两个数只能是5和5);或者是27(这两个数只能是3和9)。换句话说,老师给小强的这个积x*y至少有3个素因子,且这三个素因子不全相同。
step2 “小明:我知道你不知道。”
小明说的这句话就比较有意思啦。为什么小明就那么笃定小强一定不知道这两个数是多少呢?下面我们来一一分析:
就是因为x*y至少有三个不全相同的素因子,小强才不知道这两个数x和y。
小明敢如此笃定,一定是他知道的信息没有给小强推断出来这两个数的任何可能性。也即他知道x+y后,能判断出x和y没有都是素数的可能性,也没有一个是素数,另一个是这个素数的平方的可能性。
根据1+1猜想(好像还没有完全证明):即任意一个大于2的偶数都可以表示为两个素数的和。
(当然,有些奇数也可以表示为两个素数的和,比如13可以表示为2和11)
我们可以推知小明拿到的和x+y不可能是偶数 。(如果是的话,那么这两个数有可能都是素数,小强也就不敢那么笃定了)
这样就完了吗?显然不。
也就是说这两个数的和x+y是奇数就能保证这两个数不能同时是素数了吗,别忘了有个比较特殊的自然数2(既是偶数又是素数)。那么x+y是奇数,x+y-2还是奇数,且x+y-2是个奇合数(杜绝了一个是2,另一个是3,5,7,11,13这种可能性)
除此之外,不要忘记了,x+y不能一个是某个素数,另一个是此素数的平方。
至此,我们最好把x+y的可能性在1到200之内遍历一下 :
1到100+2之内(x+y-2是个奇合数):
11 17 23 27 29 35 37 41 47 51 53 57 59 65 67 71 77 79 83 87 89 95 97 101
103到200之内的所有奇数也都满足(这个时候不会有2来参合了)
step3 “小强:那我知道啦”
首先我们要明确的一点:小强知道了,但并不代表我们知道了。
小强知道一偶一奇的时候已经知道这两个数了,那么x*y为三个因子,其中一个为2,另外两个也为质数且相同。
也即是,小强手里的x*y的三个因子有两种可能,假设n为质数且n不等于2
其一:三个因子分别为:2,2,n
若x=4,y=n,奇偶,
若x=2,y=2n,同为偶
奇偶唯一,成立
其二:2,n,n,(n>=3)
若x=2n,y=n,奇偶
若x=2,y=n^2,奇偶(质数的平方仍为奇数)
X、Y奇偶不唯一,不成立
所以小强手里的x*y的三个因子必定为2,2,n类型且其中一个数为4
小强知道x*y,进而可以求出x、y。
step4 小明:那我也知道啦。
小明知道了x*y为三个因子,其中两个为2,另外一个为质数。
并为2,2,n类型,同时x、y中一个为4。
结合x+y,进而求出另外一个数。