1. 程式人生 > >一個有意思的邏輯訓練題目

一個有意思的邏輯訓練題目

題目如下:

有兩個大於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,進而可以求出xy。

step4 小明:那我也知道啦。

  小明知道了x*y為三個因子,其中兩個為2,另外一個為質數。

    併為2,2,n型別,同時x、y中一個為4。

結合x+y,進而求出另外一個數。