在學校論壇看到這道題目,全忘了的感覺。
如果你是高中的,那我覺得你完全沒問題。但是,在這個博客園的圈子,覺得全部人都是程(ban)序(zhuan)員(gong)相關的人員,解決這個問題有點難度,畢竟,想法已經偏了。
有句話說得好,如果你拿着一個錘子,那你看什么都像一個釘子。
因此程序員必要的時候必須轉換下思路啊。程序員思維是:已知條件,求值;而不是已知 條件 和 值,求證:這求值過程不存在bug。
如果有人叫你這么證明你的程序的求值過程正確,你會不會掄起你的鍵(zhuan)盤(tou)就拍過去了。
我們能做到的只是,帶入a=*,b=**,c=***,驗證等式成立。數學題讓數學家證明去吧。
下面回到高中的想法,談談這道題目吧:
求證:(a+b%c)%c=(a+b)%c 解: 假設等式左右邊的值為 v, 則 存在整數x和y,使得下面等式成立。 a+b%c = v + xc;(左邊) a+b = v + yc;(右邊) 這兩式子同時成立,則可以化簡為: 存在整數 z 使得 z*c = b - b%c 成立。 則證明 b - b%c 為 c 的倍數。 顯然 b - b%c 為 c 的倍數。
( 感覺我自己也跑歪了,如果(b - b%c 為 c 的倍數)不是顯然的話,我們還做什么程序員。
其實 (a+b%c)%c=(a+b)%c 也是顯然的。)
后注:發表了出來,才發現,其實這道題跟程序員思維沒啥聯系。純當胡扯。
下面是整理一樓 五岳 提供的正確方法,謝謝指導。(我的答案已經跑歪了)
假設: a = x*c + a0 b = y*c + b0 其中x,y,a0,b0∈Z,且|a0|<|c|,|b0|<|c| 那么 (a+b%c)%c = (x*c + a0 + (y*c + b0)%c)=(x*c +a0 + b0)%c = (a0 + b0)%c 而(a+b)%c = (x*c + a0 + y*c + b0)%c = (a0+b0)%c 兩式相等,得證
