從一道數學題彈程序員的思維:數學題,求證:(a+b%c)%c=(a+b)%c


在學校論壇看到這道題目,全忘了的感覺。

如果你是高中的,那我覺得你完全沒問題。但是,在這個博客園的圈子,覺得全部人都是程(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
  兩式相等,得證

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM