1. 程式人生 > >騰訊筆試:把兩個數和告訴A,積告訴B,求這兩個數是什麼

騰訊筆試:把兩個數和告訴A,積告訴B,求這兩個數是什麼

題目:

1-20的兩個數把和告訴A,積告訴B,

A說不知道是多少,

B也說不知道,

這時A說我知道了,

B接著說我也知道了,

問這兩個數是多少?

分析:

設和為S,積為M。

首先,A:我不知道。

說明:S可以分解成多個組合,而2=1+1,3=1+2,40=20+20,39=19+20,只有一種分解方式,因此S應屬於[4,38]集合。

其次,B:我也不知道。

說明:M也可以分解成多個組合,因此M不是質數。

再者,A:我現在知道了。

說明:S分解方式中只有一個相乘之後是合數,其他分解方式相乘之後都是質數。這樣,A才能根據B說不知道,而排出所有相乘是質數(M是質數,分解方式只有一種:1*質數)的可能,剩下的一個相乘之後是合數的組合就是A所得到的解。

而相乘之後是質數的:只有1*質數 = 質數!

1-20的所有質數:T = {2, 3, 5, 7, 11, 13, 17, 19}。

設x為T中的任意一個質數。那麼,S的可能取值集合:{2+1, 3+1, 5+1, 7+1, 11+1, 13+1, 17+1, 19+1},即:SS = {3, 4, 6, 8, 12, 14, 18, 20}

 S= 3時:3不在【4,38】集合,排除;

S= 4時:4=2+2=1+3,(2,2)相乘為4(非質數,滿足條件),(1,3)相乘為3(質數,排除);

S= 6時:6=1+5=2+4=3+3,相乘分別為5,8,9,出現兩個合數,排除;

其他值都是存在多個合數分解的情況,因此均排除了。

因此,A得到的解是2和2.

最後,B:我也知道了。

說明:B根據自己已知的M值,站在A的立場思考,能夠獲得M=4的結果,現在驗證如下:

M=4=2*2=1*4,相加結果為4,5.而5不在SS集合之中,因此結果為2和2.

因此,最終答案為2和2.