zoukankan      html  css  js  c++  java
  • 从一道数学题弹程序员的思维:数学题,求证:(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
      两式相等,得证
  • 相关阅读:
    MDK(keil)4.7中文注释乱码解决
    小型功率放大器的设计与制作
    增强输出的电路
    晶体管电路设计学习笔记(一)
    MOSFET学习
    sysTick系统定时器
    C#面向对象 什么是面向对象
    JS基础 超链接、数列的用法,行内元素和块级元素
    JS基础 常用函数、事件、阻止事件冒泡
    JS基础 定时器【setTimeout、setInterval、clearInterval 】
  • 原文地址:https://www.cnblogs.com/shenqi0920/p/3540258.html
Copyright © 2011-2022 走看看