S先生与P先生谜题及我的解

来源:互联网 发布:工业控制软件开发学校 编辑:程序博客网 时间:2024/04/29 16:27
上星期六晚,帮我哥哥找逻辑题时,发现的这道题的。
这道题目来自美国斯坦福大学的麦卡锡教授----S先生与P先生谜题。
题目:S先生与P先生谜题
设有两个自然数X、Y,2<=X<=Y<=99,S先生知道这两个数的和S,P先生知道这两个数的积P,他们二人进行了如下对话:
S:我确信你不知道这两个数是什么,但我也不知道。
P: 一听你说这句话,我就知道这两个数是什么了。
S: 我也是,现在我也知道了。
现在你能通过他们的会话推断出这两个数是什么吗?(当然,S和P先生都是非常聪明的)
看到以后,立即就爱上它了,但直到今天才做出来,做出来以后,不是不汗颜的,因为里面涉及到的逻辑思考并不难。其实当天晚上把S的第一句话想明白了一半,到第二天下午的时候,彻底把S的第一句话和P的那句话想明白了,本来当时就应该做出来了,但我忽略了S的第二句话,于是通过这几天的思考,总觉得少了一个条件,但又不确定,在今天实在想不出的情况下,再读了一下题,发现自己少用了一个条件,于是带入S的第二句话,略加思考和验证就出来了。
下面说说我的思路(推论中小写的p表示素数,大写的P不是素数)。
1. 如果S是以下数的话,根据2≤X≤Y≤99,S先生可直接知道X和Y
  • S = 4时,X = 2,Y = 2
  • S = 5时,X = 2,Y = 3
  • S = 197时,X = 98,Y = 99
  • S = 198时,X = 99,Y = 99
由S先生的第一句话的后半部分知,S不可能是以上4个数中的任何一个数。
2. 如果X和Y均为素数的话,则P先生在得知P的情况下,可以轻松算出X和Y,如P = 481 = 13×37。所以由S先生的第一句话的前半部分得知,S不可能被表示为两个素数的和,即X和Y不可能都是素数。举个例子:如果S = 84的话,则可能有X = 5,Y = 79,则这时P可能是P = 5 × 79 = 395,P先生可以轻松得出X和Y。所以,如果S是84的话,S先生是不能肯定P先生不知道X和Y的,所以
S是不能被表示为两个素数的和的数         (a)
先别忙算,还可以缩小S的取值范围。
3. 如果X或Y中,仅有一个是素数,且该数大于50,则P先生还是能在仅知道P的情况下解出X和Y的。设P可以分解为以下几个素数的积:
P = p0p1p2...pn
其中pn是大于50的素数,因为
pn > 50
故对任何素数p,均有
pnp> 100
故X和Y中必有一数等于pn,而另一数等于p0p1p2...pn-1大于50的最小素数为53,故如果
53 + 2 ≤S ≤ 53 + 99
即当
55 ≤S ≤ 152
时,S先生是不能肯定P先生不能算出X和Y的。小于99的最大素数为97,故当
97 + 2 ≤S ≤ 97 + 99
即当
99 ≤S ≤ 196
时,S先生也不能肯定P先生不能算出X和Y的。
故根据S先生的第一句话,S取值范围为:
6 ≤S ≤ 54                                 (b)
4.根据哥德巴赫猜想的验证,可以轻松确定,区间[6, 54]中的所有偶数均能被表示为两个素数的和(如果不怕麻烦,也可以自己验证一下嘛),故S是区间[7, 53]中的某个奇数。因为2是素数,故也有一些奇数也可以表示为两个素数的和,找出[3, 53]中的素数,与2相加,再进一步剔除区间[6, 54]中能被表示为两个素数之和的奇数:
        7 = 2 + 5
9 = 2 + 7
13 = 2 + 11
15 = 2 + 13
19 = 2 + 17
21 = 2 + 19
25 = 2 + 23
31 = 2 + 29;
33 = 2 + 31
39 = 2 + 37
43 = 2 + 41
45 = 2 + 43
49 = 2 + 47
故根据S先生的第一句话,可以确定S的值只可能是以下几个数之一:
11, 17, 23, 27, 29, 35, 37, 41, 47, 51, 53
设集合A={11,17,23,27,29,35,37,41,47,51,53},则
S∈A                                     (c)
5.由P先生的那句话,得知P先生根据S先生的第一句话,得出了结论c,在已知P的情况下算出了X和Y。
设P的素数分解为:
        P = p0p1p2... pi...pn    (n>2)
则存在唯一的
X = p0p1p2... pi
Y = pi+1...pn
满足
X + Y = S∈A
将这个结论(条件)命为d,满足这个条件的P组成集合B。
举例说明,设P=130,对P进行素数分解有:
        P = 2×5×13
这时X和Y的解可能为(2,65)、(5,26)或(10,13),但仅有(10,13)这组解满足:
        10+13=23∈A
于是当P=130时,根据结论c,P先生可解出X和Y。但当P=18,24,28,……时,P先生也可以求出X和Y来。
6.S先生根据P先生的那句话,也解出了X和Y来,也即是对于S先生所知的S根据条件d,解出了X和Y。即在S的和表达式
        S = X0 + Y0
S = X1 + Y1
S = X2 + Y2
……
S = Xn + Yn
中仅有一组(Xi,Yi)的积P满足条件d,即满足
        P = Xi×Yi
        P ∈ B
这样S先生才能解出X和Y。
现对集合A中的元素逐一验证:
当S=11时,有
        S = 2 + 9,P = 2×9 = 18∈B
        S = 3 + 8,P = 3×8 = 24∈B
        S = 4 + 7,P = 4×7 = 28∈B
当S=17时,仅有
        S = 4 + 13,P = 4×13 = 52∈B
当S=23时,有
        S = 4 + 19,P = 4×19 = 76∈B
        S = 7 + 16,P = 7×16 = 112∈B
        S = 10 + 13,P = 10×13 = 130∈B
……
总之,只有当S=17时,才存在唯一的一组(4,13)满足
        S = 4 + 13 = 17∈A
        P = 4×13 = 52∈B
解得X=4,Y=13
我的这个验证过程是写程序来验证的。