mod运算,即求余运算,是在整数运算中求一个整数 x 除以另一个整数y的余数的运算,且不考虑运算的商。在计算机程序设计中都有MOD运算,其格式为: mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数。

模p运算

给定一个正整数p,任意一个整数n,一定存在等式
n = kp + r其中k、r是整数,且 0 ≤ r < p,称呼k为n除以p的商,r为n除以p的余数

(p是除数, k 相当于商, n相当于被除数, r 相当于余数,余数一定是比除数小的 ,即r<p)

对于正整数p和整数a,b,定义如下运算:

  • 取模运算:a mod p 表示a除以p的余数。
  • 模p加法:(a + b) mod p ,其结果是a+b算术和除以p的余数,也就是说,(a+b) = kp +r,则 (a+b) mod p = r。
  • 模p减法:(a-b) mod p ,其结果是a-b算术差除以p的余数。
  • 模p乘法:(a × b) mod p,其结果是 a × b算术乘法除以p的余数。

运算规律 

结合律 ((a+b) mod p + c)mod p = (a + (b+c) mod p) mod p
((a×b) mod p×c)mod p = (a× (b×c) mod p) mod p
交换律 (a + b) mod p = (b+a) mod p
(a × b) mod p = (b × a) mod p
分配律 ((a +b)mod p × c) mod p = ((a × c) mod p + (b × c) mod p) mod p
(a×b) mod c=(a mod c * b mod c) mod c
(a+b) mod c=(a mod c+ b mod c) mod c
(a-b) mod c=(a mod c- b mod c) mod c

证明((a+b) mod p + c) mod p = (a + (b+c) mod p) mod p
假设
a = k1p + r1
b = k2
p + r2
c = k3p + r3
a+b = (k1 + k2) p + (r1 + r2)
如果(r1 + r2) >= p ,则
(a+b) mod p = (r1 + r2) -p
否则
(a+b) mod p = (r1 + r2)
如果(r1 + r2) >= p,将 (a+b) mod p = (r1 + r2) -p 带入
(1) 那么 (a+b) mod p + c = (r1 + r2) -p + k3
p + r3 = r1+r2+r3+(k3-1)p
如果(r1+r2)<p ,将(a+b) mod p = (r1 + r2) 带入
(2) 那么(a+b) mod p + c = r1+r2+ k3p + r3 = r1+r2+r3 +k3p
综合(1)(2)两处, ((a+b) mod p + c) mod p的结果是 r1+r2+r3的算数和除以p的余数
同理右边一样的算法可证.

证明((a\*b) mod p\* c)mod p = (a\* (b\*c) mod p) mod p
假设
a = k1*p + r1
b = k2*p + r2
c = k3*p + r3
a*b = ( k1*p + r1)(k2*p + r2) = k1k2p2+(k1r2+k2r1)p+r1r2=(k1k2p+k1r2+k2r1)p+r1*r2;
如果r1*r2 >=p ,则
(a
b) mod p = r1*r2 -m*p (m>0 ,属于正整数)
否则r1*r2 < p,则
(a*b) mod p = r1*r2
如果r1*r2 >=p ,那么将(a*b) mod p 带入
(1) 那么 (ab) mod p * c = ( r1*r2 -mp)(k3*p + r3) =( -mk3p+r1r2k3-mk3)p + r1r2r3 ( (m>0 ,属于正整数))
如果r1r2<p 那么将(a*b) mod p带入
(2)那么 (a
b) mod p * c = r1r2(k3p+r3)=k3r1r2p+r1r2r3
综合(1)(2)两处 ((a*b) mod p* c)mod p 的结果是 r1r2r3的算术乘积除以p的余数
同理右边一样的算法

这里交换律一看就能看出来不证明了

证明((a +b)mod p × c) mod p = ((a × c) mod p + (b × c) mod p) mod p
假设
a = k1*p + r1
b = k2*p + r2
c = k3*p + r3
证明左边
a+b = (k1 + k2) p + (r1 + r2)
如果(r1 + r2) >= p ,则
(a+b) mod p = (r1 + r2) -p
否则
(a+b) mod p = (r1 + r2)
如果(r1 + r2) >= p,将 (a+b) mod p = (r1 + r2) -p 带入
(1) 那么(a +b)mod p × c =( r1+r2-p)×( k3×p + r3) =( -k3×p+r1k3+r2k3-k3)×p + (r1+r2)×r3
如果(r1+r2)<p ,将(a+b) mod p = (r1 + r2) 带入
(2) 那么(a+b) mod p × c =( r1+r2) ×( k3*p + r3) = (r1k3+r2k3) p +(r1+r2)×r3
综合(1)(2)两处, ((a+b) mod p × c) mod p的结果是(r1+r2)×r3的算数值 除以p的余数
证明右边
(a × c) = (k1p+r1)(k3p+r3) =( k1k3p+k1r3+r1k3) p + r1r3;
如果r1r3>=p ,则
(a × c) mod p = r1r3-mp (m>0的正整数)
如果 r1r3<p ,则
(a × c) mod p = r1r3
同理 (b × c) mod p
如果r2r3>=p ,则 (b × c) mod p = r2r3-np (n>0的正整数)
如果r2r3<p ,则 (b × c) mod p = r2r3
排列组合 四种情况
第一种情况 r1r3>=p && r2r3>=p
那么(a × c) mod p + (b × c) mod p = r1r3-mp + r2r3-np = (-m-n)p+ (r1+r2)r3
第二种情况 r1r3<p && r2r3>=p
那么(a × c) mod p + (b × c) mod p = r1r3 + r2r3-np = (-n)p+ (r1+r2)r3
第一种情况 r1r3>=p && r2r3<p
那么(a × c) mod p + (b × c) mod p = r1r3-mp + r2r3 = (-m)p+ (r1+r2)r3
第二种情况 r1r3<p && r2r3<p
那么(a × c) mod p + (b × c) mod p = r1r3 + r2r3 = (r1+r2)r3
以上四种情况的结果都是(r1+r2)×r3的算数值 除以p的余数 和左边的结果相等

证明(a×b) mod c=(a mod c * b mod c) mod c
假设
a = k1*p + r1
b = k2*p + r2
c= p
(a × b) mod c 的结果有两种情况.(在上面证明过)
如果r1r2>=p ,那么(a × b) mod c = r1r2-mc (m>0)
如果r1
r2< p ,那么 (a × b) mod c = r1r2
以上两种的结果都是r1r2乘积 除以c (也是p)的余数.
证明右边
amodc = amodp = r1;
bmodc =bmodp = r2;
a mod c * b mod c = r1*r2;
因此和左边是相等的.

(a+b) mod c=(a mod c+ b mod c) mod c 和(a-b) mod c=(a mod c- b mod c) mod c的证明和(a×b) mod c=(a mod c * b mod c) mod c证明一样,略

模p相等

如果两个数a、b满足a mod p = b mod p,则称他们模p相等,记做
a ≡ b (mod p)
可以证明,此时a、b满足 a = kp + b,其中k是某个整数。

证明
假设
a = k1p+r1;
b = k2p+ r2;
如果 a mod p = b mod p ,那么r1 = r2;
所以 a= k1p+ r1= k1p+b-k2p = (k1-k2)p + b;
因此 a = kp+b;

对于模p相等和模p乘法来说,有一个和四则运算中迥然不同的规则.
在四则运算如果c是一个非0整数,则ac = bc 可以得出 a =b
但是在模p运算中,这种关系不存在. 举例如下

那么如何才能消除呢?执行消除需要满足定理条件
定理(消去律):如果gcd(c,p) = 1 ,则 ac ≡ bc mod p 可以推出 a ≡ (b mod p)

gcd 函数解释
GCD函数是 返回两个或多个整数的最大公约数
最大公约数是能分别将各个参数除尽的最大整数。
例如 2 和4的最大公约数是 2, 2和3的最大公约数是1
gcd(c,p)=1 ,表示没有公约因子

证明
因为ac ≡ bc (mod p)
所以ac = bc + kp,也就是c(a-b) = kp  (模等可以这样转换)
因为c和p没有除1以外的公因子,因此上式要成立必须满足下面两个条件中的一个
1) c能整除k
2) a = b
第一种情况  ,a-b = kp/c; 因为c和p没有除1以外的公因子, 所以 a-b = k1p;  k1 = k/c  .所以 a = b+k1p ; 所以  a ≡ b (mod p)
第二种情况 a = b,则a ≡ b mod p 显然成立

MOD 运算(拷贝简书,主要是为了自己个人学习)相关推荐

  1. 遗传算法 python 简书_遗传算法(Genetic Algorithm ,GA)学习笔记

    1 遗传算法的概念 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA) 是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程 ...

  2. [译] 12步轻松搞定python装饰器 - 简书

    [译] 12步轻松搞定python装饰器 - 简书 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编 ...

  3. 简书收入结算与提现常见问题

    Q1: 为什么每月收入会有部分显示"待入账" ? 根据国家税务总局的相关规定,部分收入需要按月缴纳个人所得税,比如付费文章的收入.付费连载的收入,该两类收入按月扣税后结算.一般结算 ...

  4. 简书项目实战-Header

    1 项目目录搭建 安装create-react-app,并创建项目jianshu.删掉src目录下文件,只留下index.js(入口文件), index.css, App.js文件 当你在一个js文件 ...

  5. React开发简书总结

    React 简书网开发 github地址 技术栈 what way React 创建组件 Redux 管理数据 react-redux 方便使用 redux redux-thunk 让store有能力 ...

  6. iOS实现简书的登录验证方式(极验验证)

    开篇 我们登录简书的时候就会看到如下类似的验证方式,个人还是很喜欢这种验证方式的,想着如果把它自如自己设计的软件中还是不错的,但是我们要怎么实现这种验证效果呢,今天就来介绍一下. 图形验证码.gif ...

  7. 【部分博客已搬家至博客园】对CSDN、博客园和简书的一点比较

    有强迫症,就把部分博客搬家到博客园养老了.      我觉得CSDN和博客园各有各的好吧. 我个人写博客方式的历程: 一开始是直接在CSDN上的富文本编辑器上写,界面简洁大方,可插入数学公式,插入的代 ...

  8. 简书makedown自动生成目录

    makedown在CSDN和博客园之中使用[TOC]可以直接生成目录,但是简书不行. 部分大牛使用CSS/HTML自动生成目录,但是对于我们来说这样有点不方便,而且不美观. 部分人使用Visual S ...

  9. vs2015开发c语言 简书,微软符号服务器_NT_SYMBOL_PATH给VS调试带来的隐藏坑

    昨天我碰到一个非常坑的问题,问题是这样的: 我机子上已经装了vs2015和vs2010,vs2010和vs2015都跑得很溜,没有啥异常现象.然后昨天我不知哪里来的突然想法:机子上有些资源需要打包收藏 ...

最新文章

  1. (C++)除基取余法:将十进制数转化为Q进制数
  2. 用 TS + Vue 写了一个在 Chrome 中运行 Prettier 格式化的扩展程序
  3. php 对象存储过程,从php中的存储过程中获取价值
  4. Nginx中ngx_http_upstream_module模块
  5. MVC、 MVP、 MVVM之间的区别
  6. 自然语言处理以及对话系统知识点总结
  7. Oracle11g报bde,表现 – BDE与ADO在德尔福
  8. java中isa什么意思_ISA是什么?
  9. AndroidStudio_在android中使用properties配置文件_进行配置_只能读取配置_不能写入配置_放在assets---Android原生开发工作笔记230
  10. .Net面试葵花宝典
  11. 决策树C4.5算法的不足
  12. ubuntu linux qq闪退
  13. 别在学习框架了,那些让你起飞的计算机基础知识。
  14. 大韩航空如何成为一流航空——等级文化与称呼的改变
  15. VB定义字符串数组并赋值
  16. Java最牛教材!javaexcel合并单元格样式
  17. Directx+CEGUI把界面集成到游戏中,支持全屏方式(c++)
  18. PLC通过伯努利方程近似计算水箱流量(FC)
  19. 非常详细的HTTPS分享
  20. c4d python使用方法_c4d 有没有python的技术说明文档_c4d python插件安装教程

热门文章

  1. 利用SOLR搭建企业搜索平台 之八(solr 实现去掉重复的搜索结果,打SOLR-236_collapsing.patch补丁)...
  2. html仿excel冻结 css,excel的人工分页设置可实现
  3. 3dcnn视频分类算法-pytorch上分之路
  4. 写作神器自动生成-写作猫文章生成器
  5. 为什么不应该买小房换大房?
  6. matlab提示output,强制Matlab输出到命令行(Force Matlab output to command line)
  7. 解决idea中 thymeleaf 标签th: 报红波浪线
  8. 深圳盛世光影传媒有限公司工作环境怎么样?
  9. 基于阿里云实现3D模型显示(WebAR项目)
  10. 群辉-利用自带套件DNSserver实现免改登录地址访问内外网NAS系统