很多地方用到模运算,这里说明模运算的一些规律,并加以证明。 后续会对这些理论实际的应用加以记录和说明。

1. 模运算是取余运算(记做 % 或者 mod),具有周期性的特点。 m%n的意思是n除m后的余数, 当m递增时m%n呈现周期性特点, 并且n越大,周期越长,周期等于n。 
    例如
       0 % 20 = 0,1 % 20 = 1, 2 % 20 = 2, 3 % 20 = 3, ..., 19 % 20 = 19
      20 % 20 = 0,21 % 20 = 1,22 % 20 = 2,23 % 20 = 3, ...,39 % 20 = 19
2. 如果 m % n = r,那么可以推出如下等式
    m = k * n + r (k为大于等于0的整数, r <= m)
3. 同余式, 表示正整数a,b对n取模,它们的余数相同,记做 a ≡ b mod n或者a = b (mod n)。
   根据2的等式可以推出 a = kn + b 或者 a - b = kn
   证明:  ∵ a = k1 * n + r1
             b = k2 * n + r2
          ∴ a - b = (k1 - k2) * n + (r1 - r2)
             a = k * n + (r1 - r2) + b
          ∵ a, b对n取模同余,r1 = r2
          ∴ a = k * n + b (k = k1 - k2)
4. 模运算规则, 模运算与基本四则运算有些相似,但是除法例外。其规则如下
   (a + b) % n = (a % n + b % n) % n            (1)
   (a - b) % n = (a % n - b % n) % n            (2) 
   (a * b) % n = (a % n * b % n) % n            (3)
    a% n = ((a % n)b) % n                      (4)

(1)式证明
∵ a = k1*n + r1

b = k2*n + r2

a % n = r1

b % n = r2

∴(a+b) % n = ((k1+k2)*n + (r1+r2)) % n = (r1+r2) % n = (a % n + b % n)% n
    得证
(2)式证明同上
(3)式证明
     a = k1*n + r1
     b = k2*n + r2
     (a*b) % n = (k1k2n2 + (k1r2+k2r1)n + r1r2) % n = r1r2 % n = (a %n * b %n ) % n
 (4)式证明
      设 a % n = r
      a%n= (a * a * a * a…*a) %n = (a %n * a %n * a %n * … * a %n) %n = rb % n = ((a % n) b) % n
  
模运算看起来不是很直观,但是可以用来推导出一些有用的东西。 例如(4)式可以用来降幂运算,例如计算6265 % 133,直接计算的话需要算出6265 利用(4)式可以进行降幂运算。
  6265 % 133
  = 62 * 6264 % 133
  = 62 * (622)32 % 133
  = 62 * 384432 % 133
  = 62 * (3844 % 133)32 % 133
  = 62 * 12032 % 133

= 62 * 3616 % 133
  = 62 * 998 % 133
  = 62 * 924 % 133
  = 62 * 852 % 133
  = 62 * 43 % 133
  = 2666 % 133
  = 6

转载于:https://www.cnblogs.com/cchun/archive/2012/07/22/2603594.html

转载_模运算_归纳得很精华啊相关推荐

  1. C语言学习趣事_之_大数运算_加法

    C语言学习趣事_大数运算_之加法 1.引子    在C语言中,因为预定义的自然数类型的大小是有上下限度的,这就决定了在进行数的运算的时候,必然受到限制,同时因为C语言是最接近汇编的一种程序设计语言,并 ...

  2. MATLAB_4-形态学_腐蚀_膨胀_灰度图的腐蚀以及膨胀_开运算_闭运算_文章末尾有几个素材例子

    素材链接: MATLAB_4-形态学_课程需要的素材 记住单词拼写: 腐蚀 erode 膨胀 dilate 开运算 open 闭运算 close 图像重建 imreconstruct reconstr ...

  3. C++_数据类型_算术运算符_取模运算_递增递减运算_赋值运算符_比较运算符---C++语言工作笔记014

    10 对 3取余可以看到是3 余数是3

  4. 酒店智能门锁方案功能介绍_模组_西城微科

    世界上自有门锁以来,门锁的变革经历了:机械锁-光孔锁-磁片锁-电子锁-智能感应卡锁,门锁不断地更新换代.进入九十年代后,智能卡锁以其无余伦比的优势创建了门锁新概念.计算机.电子机械和智能卡的诞生,门锁 ...

  5. matlab中xtem,快速傅里叶变换_蝶形运算_按频率抽取基2-fft算法_MATLAB代码

    function y=MyFFT_FB(x,n) %MYFFT_TB:My Fast Fourier Transform Frequency Based %按频率抽取基2-fft算法 %input: ...

  6. 【转载】蒙哥马利幂模运算 - 简介

    蒙哥马利幂模运算 - 简介 蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,是RSA加密算法的核心之一. 蒙哥马利幂模运算 - 特点及原理 蒙哥马利模乘的优点在于减少了取模的次 ...

  7. 取模是什么意思python_原来Python中的取模运算方法竟然是这样的!

    今天小编就为大家分享一篇Python中的取模运算方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 所谓取模运算,就是计算两个数相除之后的余数,符号是%.如a % b就是计算a除以b ...

  8. java中的取模和取余_取模运算

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 取模运算是求两个数相除的余数.[1] 取模运算("Modulus Operation")和取余运算(&qu ...

  9. 取模运算性质_求余、取模运算在RTOS中计算优先级的理解

    uCOS3中的部分源码: /* 置位优先级表中相应的位 */ void OS_PrioInsert (OS_PRIO prio) { CPU_DATA bit; CPU_DATA bit_nbr; O ...

最新文章

  1. Ubuntu环境下安装Bochs
  2. r语言逻辑向量相加_R语言基础教程——第3章:数据结构——向量
  3. 第四篇 群聚类非线性表的编程实验 第11章 应用图的遍历算法编程
  4. int定义源码 python_python学习(第一章)
  5. 新分类!全总结!最新Awesome-SLU-Survey资源库开源!
  6. 斜挎包长度到哪里合适_电视背景墙的位置在哪里比较合适?进来你都知道了
  7. 如何用servle和c3p0-DBUtils实现用户登录功能
  8. 抓眼球包装设计样机模板,色彩秘籍都在这里了!
  9. metinfo mysql off_利用Sqlmap测试MetInfo企业网站管理系统MySql注入漏洞
  10. MyBatis学习总结(25)——Mybatis Generator generatorConfig.xml配置文件详细说明
  11. go sync.once用法
  12. .netcore2.2 windows发布IIS 服务器配置 0x8007000d
  13. VMWare 虚拟机网络共享给宿主机
  14. Linux 平台上的软件包管理
  15. 直接使用word模板生成word文件
  16. 五个温度带的分界线_中国划分为哪五个个温度带
  17. 使用Jwt验证登录demo
  18. 数据库通过出生日期计算年龄
  19. 「端到端」和「点到点」的联系及区别
  20. Java中的标识符、关键字、字面值、变量、八种基本数据类型与类型转换规则

热门文章

  1. 浅析Python3中的bytes和str类型(转载)
  2. Pytorch —— BN、LN、IN、GN
  3. 小波变换(wavelet transform)的通俗解释(三)
  4. android 数据库 数组,如何从SQLITE数据库中获取数据到android中的数组?
  5. phpfpm怎么连接mysql_php-fpm连不上mysql的问题?
  6. BCGControlBar MFC对话框换肤 续
  7. UML部署图和构件图
  8. 计算机计算能力共享,如何共享计算机的计算能力?
  9. 安装vue cli_vuecli4.x安装与搭建
  10. 使用lambdaquery() 报空指针异常_Java 14 来势汹汹,这回让空指针无处遁形!!