【题目】
有两个介于[2,99]的自然数,甲知道它们的积,乙知道它们的和。
甲:我知道你不知道。 (1)
乙:我知道你也不知道。 (2)
甲:我知道了。 (3)
乙:我也知道了。 (4)
求这两个数。
【问题背景】
这是念大学的时候一位高中同学email给我的问题,题目结构及意思比较简单明确,可求解过程似乎并不那么容易。由于一直没思路,弄得整两周没上好课,天天在纸上比比划划,突然有一个晚上得到一些思路,找到了那两个数,并通过Fortran编程验证,完事高兴了好一阵。下面列出我的思路和求解过程,和有兴趣的朋友一起讨论。
【答案】
4和13。
【数值资料】
下面是1~100以内的质数(共25个):
02,03,05,07,11,13,17,19,23,29,31,37,
41,43,47,53,59,61,67,71,73,79,83,89,97
【程序穷举】
//Fortran程序找不到了
//以后补一个Java的
【思路及求解】
从四句话要分析出这几个数。
第(1)句只能确定甲知道的积大于4,这样他才可以肯定乙的手里的和大于4,因此乙无法确定那两个数。
第(2)句可以得出乙知道的和无法分解成两个质数,否则乙不敢说这句话,这样通过哥德巴赫猜想可以确定乙知道的和不是偶数,同时质数加2构成的奇数也被排除在外。由此乙知道的和一定在下面25个数中:
01
,
03
,
05
,
07
,
09
,11,
13
,
15
,17,
19
,
21
,23,
25
,27,29,31,
33
,35,37,
39
,
41,
43
,
45
,47,
49
,51,53,
55
,57,59,
61
,
63
,65,67,
69
,71,
73
,
75
,77,79,
81
,83,
85
,87,89,
91
,93,95,97,
99
第(3)句甲知道了那两个数,说明甲知道的积所有可能的因数分解结果之和只有一个在上面的25个数中。依次对上面25个数进行分解。
例如11:
若02,09另:6+3=9,可以;
若03,08另:6+4=10,12+2=14,可以;
若04,07另:14+2=16,可以;
若05,06另:15+2=30,否决;
例如17:
若02,15另:6+5=11,否决;
若03,14另:21+2=23,否决;
若04,13另:26+2=28,可以;
若05,12另:20+3=23,否决;
若06,11另:33+2=35,否决;
若07,10另:35+2=37,否决;
若08,09另:24+3=27,否决。
第(4)句乙也知道了这两个数,说明乙知道的和只有一组分解结果构成的积满足(3)。
这样可以看出4和13满足要求。
【扩展】
当时通过程序验证1000以内只有这样一对数满足要求。
1000以外是否还所有这样的数对呢?
【结论】
这题目挺有意思,有点糊弄小学生似的。