S先生与P先生谜题

来源:互联网 发布:jquery把json转成数组 编辑:程序博客网 时间:2024/04/25 14:45

美国斯坦福大学的麦卡锡提出的

  设有两个自然数X、Y,2<=X<=Y<=99,S先生知道这两个数的和S,P先生知道这两个数的积P,他们二人进行了如下对话:

  S:我确信你不知道这两个数是什么,但我也不知道。

  P: 一听你说这句话,我就知道这两个数是什么了。

  S: 我也是,现在我也知道了。

  现在你能通过他们的会话推断出这两个数是什么吗?(当然,S和P先生都是非常聪明的)

  方法一:

  我把思路说一下吧

  1.s先生自己不知道x,y

  说明和数s不是4,5,197,198

  2.s先生知道p先生不知道x,y

  首先,什么样的数p先生可以知道呢?

  如s=8

  8=2*4 8=1*8 后者是不可能的( x,y>=2 )

  又如 s=25

  25=5*5 只有一种 

  这样p先生就能知道x,y

  这说明s分解后 s=M1+N1=M2+N2=.....

  M1*N1 分解成 乘积 的形式有 两种或两种以上,

  若 s=11 

  11=2+9 2*9=18 18=2*9=3*6

  11=3+8 3*8=24 24=2*12=3*8=4*6

  11=4+7 4*7=28 28=2*14=4*7

  这样s先生可以确定p先生不能知道x,y

  所以s先生知道的 和数s 是如下的数

  SA={ 11,17,23,27,29,35,37,41,47,51,53...}

  SA也不可以是29,因为29=7+11+11,则x,y=88,11,

  同样得到SA={11,17,23,27}

  3.p先生听了s先生的话后,知道了x,y

  我们可以想像p先生根据s先生的话,已经知道s先生知道的和数是集合SA中的数

  若自己所知道的乘积p分解成m*n后 其中有一个(m+n)是集合SA中的数

  则 m,n就是所求的数x,y

  如 p=18

  18=2*9 2+9=11

  18=3*6 3+6=9

  11属于SA

  x,y就是 2 和 9

  若p=72

  72=2*36 2+36=38

  72=3*24 3+24=27

  ......

  72=8*9 8+9=17

  其中27,17都属于SA

  于是72被排除了

  所以p先生所知道的乘积是如下

  pb={18,24,28,30,50,52,....}

  所知道的x,y是乘积在pb中,且 乘积分解后的两数的和只有一个 在SA中的数对,记为

  XY={(x1,y1),(x2,y2),.....}

  4.s先生也知道了x,y

  可以知道,这时s先生也知道p先生知道的数的范围XY

  如果s分解后的两数s=m+n,(m,n)只与XY中的一个数对相同

  这样,s先生也就找到了x,y ,但是没有这样的数。

  方法二:

  我看到过答案,这是根据我的理解写下的

  1、S:我确信你不知道这两个数是什么,但我也不知道。

  为什么s先生这么确定?换句话说P先生得到怎样的组合就能立刻知道mn的值呢?

  先看看哪些情况下p先生能立刻得到答案

  (1)mn不能同时为质数。

  mn为质数,那么他们的乘积分解成两个因子乘积的可能性就唯一了,那么P先生就会立刻得知mn的值。

  譬如34=1*34=2*17,因为nm是大于等于2的,那么1*34这样的组合是不可能的,那么mn就是2和17。

  Mn不为质数,那么他们可能之中有1个质数,或者2个同为合数。

  (2) 如果mn中有一个质数,那么那个质数不会大于50

  如果mn有一个大于50,那么他们分解成两个因子乘积的可能性中,其他的分解方式都会有一个因子会超过100,然么分解方式必然会被P排除,那就只剩下一种方式,P也就立刻知道答案。

  譬如318 = 6*53 = 3*106 = 2*159,因为mn小于等于99,那么后两种可能性肯定被排除。mn就肯定是6,53。

  (3) 如果mn都是合数,那么都不会大于50

  理由同上。可就是P分解因子,只有一种情况下mn是小于100的,其他情况mn必有一数大于等于100。

  其实mn的积也不会是8或者27,因为8 = 2*4 27=3*9,分解因子也就一种情况

  Mn的值在以上情况下P先生可以立刻知道答案,那么也就是说S先生看到mn的和可以立刻推理出mn不可能存在上述的情况

  (4)S不能分解成三个这样的质数之和:

  如果S=29=7+11+11.那么X,y=11,88,或7,121 后面一种不符合。

  又如果S=35=7+11+17,那么x,y=7,187或11,119或17,88 前面两种不符合。

  (1)S肯定是奇数

  S肯定是奇数,如果s是偶数,那么mn有可能是质数。(原作者引用了哥德巴赫猜想:每一个大于2的偶数都是两个素数的和。虽然这个猜想没有证明,但是在100范围以后可以实验证明这个猜想是正确的。如果有例外的话,这个猜想也就不会这么有名了。也就是说4-100范围以内的偶数都可以用两个质数的和表示。)

  (2)mn的和不能大于54

  这个推测的依据是建立在上面2、3之中的。因为S先生确信P先生不知道mn的值,所以2、3的情况是不会从mn的和中反应的。

  (3)S-减去2的值不是质数

  在质数中,2是一个特例,他是质数中唯一的偶数。既然mn不能同时为质数,那么s减去2的值也就不是质数了。

  (4)S不等于29,35,37,41,47,51,53.

  有上得S只能取11,17,23,27。

  2、P: 一听你说这句话,我就知道这两个数是什么了。

  P先生和我们一样,现在知道mn的和就只有上面的可能了。他只要把mn的积分解两个因子乘积,所有可能性中,有且只有一组的可能性中两个因子的和刚好是上面11个数中的一个,那么P先生就知道mn的值了。

  假设P = 30 = 5*6 = 2*15,而5+6=11,2+15 =17,11和17都在上面11个数之中,那么P先生就无法判断mn到底是哪组数。所以P就不会等于30。

  既然知道P先生的判断方法,现在就从11个数出发,一个个的推导。

  3、S: 我也是,现在我也知道了。

  S先生根据P先生的话知道了mn的积分解因子,只有一组的因子之和为11个数中间的一个。而S先生同时也立刻知道mn的值。我们可以推断,如果把mn之和拆成数个由一个奇数和一个偶数的组合,只有一个组合符合下面的条件:这个奇数和偶数的乘积符合第2条P先生的判断,也就是把这个积分解成两个因子乘积,所有分解情况中,有且只有一组的情况中两个因子的和刚好是上面11个数中的一个。这样S先生也就能知道mn的值了

  我们只要把11个数拆成若干种奇偶组合,如果有2个或者2个以上的组合满足P先生判断条件,那么这个数就不是mn的和。:

  (1)11 = 2+9=4+7=6+5=8+3

  2*9 = 18 = 3*6,3+6=9不在10个数中,那么2*9符合。

  4*7=28=2*14,前面说过mn是一奇一偶,2*14不考虑,4*7符合。

  6*5=30=2*15,而6+5=11,2+15=17,两个数都在11个数中,那么P先生是无法判断,所以这个组合可以略过。

  8*3 = 24 = 2*12=4*6,,那么2*12,4*6不用考虑,8*3符合

  现在有3组数字符合,那么11就不是mnd的和了

  从上面看,如果把11拆成2的次方和一个质数的组合,那么只有一种分解是一奇一偶,其他的情况都是2个偶数。(4,7) = (2^2,7),(3,8) = (3,2^3),这样的组合分解就具有唯一性,就能满足我们的要求。11可以拆成2个这样的组合,11就可以排除了。

  (2)23 = 2^2+19 = 2^4+7

  27 = 2^2+23 = 2^3+19

  上面是数可以拆成2组2的次方和一个质数,也就是有2组符合P先生的判断,故这些数可以排除,那就只剩下17,29了

  (3)29 =16+13=2+27

  2*27 = 54 =3*18=6*9,符合

  16*13 是2^4和13,13是质数,肯定符合

  29有2组符合,所以29排除。

  (4)现在就只剩下17了。

  17=4+13=6+11=7+10=8+9

  4*13=52,6*11=66,7*10=70,8*9=72都只有一组符合。排除故无解。

原创粉丝点击