數學小魔術——神奇的二進制
請你任意猜想一個三位數,把這個三位數乘以 91 的乘積的最後三位告訴我,我們很快猜出你心中所想的那個三位數是多少?
我們以對方心中所想的 789 為例,則對方計算出 789×91=71799 ,并把結果的三位,也即 799 告訴我。看起來,這麼做似乎損失了不少資訊,讓我沒法反推出原來的數。不過,我仍然有辦法:隻需要把對方告訴我的結果再乘以 11,也即 799×11=8789 ,乘積的末三位即是對方剛開始所想的秘密數字。
道理其實很簡單, 91×11=1001=(1000+1) ,任何三位數乘以1001,都會将該數
複制
一遍,比如, 123×1001=123×(1000+1)=123000+123=123123 ,末尾三位保持不變。
當然該問題也可描述為:
請你任意猜想一個三位數,把這個三位數乘以 11 的乘積的最後三位告訴我,我們很快猜出你心中所想的那個三位數是多少?
假設該數為 x ,上述問題即可用數學語言描述為,(x⋅91%1000)⋅11=[(x⋅91⋅11)%1000=x],這有一個基本結論,相乘之前對乘數取餘不會對結果造成影響。
我們舉一反三,我們換種方式描述該問題:我需猜測你心中所想的數字,比如銀行卡密碼,比如某人的生日,你用我們約定的一個數 a (比如91),去乘那個數,傳給我其末尾的幾位,這叫什麼操作?即為對該數字進行的加密。我用我約定的另外一個數(比如11)去乘以傳遞過來的數,即為解碼的動作。
比如對銀行卡密碼(一般為6位,比如密碼為327685)進行加密,傳輸以及最後的解碼。你我處在計算機網絡中的不同節點,你要告訴我你銀行卡的密碼,顯然你不能直接傳遞明碼,考慮到,5000001=141×35461,我們使用 141×327685%106=203585 ,作為加密後數字,我們使用 35461×203585%106=327685 。