0x33 同余
定义
若整数 $a$ 和整数 $b$ 除以正整数 $m$ 的余数相等,则称 $a,b$ 模 $m$ 同余,记为:
$$a \equiv b(mod \text{ } m)$$
同余类与剩余系
对于 $\forall a\in [0,m-1]$ ,集合 $\{ a+km \}$ $(k \in \mathbb{N})$ 的所有数模 $m$ 同余,余数都是 $a$ 。该集合称为一个模 $m$ 的同余类,简记为 $\overline{a}$ 。
由对于模n同余的所有整数组成的这个集合称为同余类,同余类中的每个元素都可以拿来代表该同余类,称为该同余类的代表数,如模 $10$ 的同余类 $\overline{1}, \overline{11}, \overline{21}$ 其实是同一个集合。
模 $m$ 的同余类一共有 $m$ 个,分别为 $\overline{0}, \overline{1}, \overline{2} \dots, \overline{m-1}$ ,它们构成 $m$ 的完全剩余系。
$1 \sim m$ 中与 $m$ 互质的数代表的同余类共有 $\varphi(m)$ 个,他它们构成了 $m$ 的简化剩余系,例如模10的简化剩余系为 ${\overline{1}, \overline{3}, \overline{7}, \overline{9}}$ 或 ${\overline{11}, \overline{13}, \overline{27}, \overline{29}}$ 。
简化剩余系关于模 $m$ 乘法封闭,因为:若 $gcd(a,m)=1$ 且 $gcd(b,m)=1$,其中 $1 \le a,b \le m$ ,则 $a \ast b$ 也不可能与 $m$ 含有相同的质因子,即 $gcd(a \ast b,m)=1$ 再由余数的定义即可得到 $gcd(a \ast b \text{ } mod \text{ } m,m)=1$ (参考下面的证明),即 $a \ast b \text{ } mod \text{ } m$ 也属于 $m$ 的简化剩余系。
证明:
已知: $gcd(a,m)=1$
求证: $gcd(a \text{ } mod \text{ }m, m)=1$
证明:
$a$ 的余数可以表示为 $a+km,k\in\mathbb{Z}$
设 $gcd(a+km,m)=d\neq1$
则 $a+km=pd,m=qd$
将 $m=qd$ 代入 $a+km=pd$ 得 $a+kqd=pd$
移项、合并同类项得 $a=d(p-kq)$
这样 $d|a,d|m$ ,所以 $gcd(a,m)\ge d\ne1$
与 $gcd(a,m)=1$ 矛盾
证毕。
费马小定理
若 $p$ 是质数,则对于任意整数 $a$ ,有 $a^p \equiv a(mod \text{ }p)$ 。
欧拉定理
若正整数 $a,n$ 互质,则 $a^{\varphi(n)} \equiv1(mod \text{ }n)$,其中 $\varphi(n)$ 为欧拉函数。
即:假如 $a$ 是一个整数, $p$ 是一个质数,那么 $a^{p}-a$ 是p的倍数。
如果a不是p的倍数,这个定理也可以写成 $a^{p-1} \equiv 1(mod \text{ }p)$ 。
证明:
设 $n$ 的简化剩余系为 $\{ \overline{a_1}, \overline{a_2}, \overline{a_3} \dots \overline{a_{\varphi(n)}}\}$ 。对 $\forall a_i,a_j$ ,若 $a \ast a_i \equiv a \ast a_j (mod \text{ } n)$ ,则移项、合并同类项得 $a \ast (a_i - a_j) \equiv 0$ 。因为 $a,n$ 互质,所以 $a_i - a_j=0$ ,即 $a_i \equiv a_j$ 。故当 $a_i \ne a_j$ 时, $a a_i,a a_j$ 也代表不同的同余系。
又因为简化同余系关于模 $n$ 乘法封闭,故 $a a_i$ 也在简化剩余系集合中。因此 $\{a_1, a_2, a_3 \dots a_{\varphi(n)} \}$ 与 $\{a a_1, a a_2, a a_3 \dots a a_{\varphi(n)} \}$ 都能表示 $n$ 的简化剩余系。综上所述:
$$a^{\varphi(n)} a_1 a_2 \dots a_{\varphi(n)} \equiv (a a_1) (a a_2) \dots (a a_{\varphi(n)}) \equiv a_1 a_2 \dots a_{\varphi(n)} (mod \text{ } n)$$
因此:
$$a^{\varphi(n)}} \equiv 1 (mod \text{ } n)$$
当 $p$ 是质数时, $\varphi(p)=p-1$,并且只有 $p$ 的倍数与 $p$ 不互质。所以,只要 $a$ 不是 $p$ 的倍数,就有 $a^{p-1} \equiv 1(mod \text{ }p)$ ,两边同时乘上 $a$ 就是费马小定理。另外,若 $a$ 是 $p$ 的倍数,费马小定理显然成立。
证毕。
欧拉定理的推论
若正整数 $a,n$ 互质,则对于任意的正整数 $b$ ,有
$a^b \equiv a^{b \text{ } mod \text{ } \varphi(n)} (mod \text{ } n)$
证明:
设 $b=q \ast \varphi(n)+r$ ,其中 $0 \le r < \varphi(n)$ ,即 $r=b \text{ } mod \text{ } \varphi(n)$ 。于是:
$a^b \equiv a^{q \ast \varphi(n)+r} \equiv (a^q)^{\varphi(n)} \ast a^r \equiv 1^q \ast a^r \equiv a^r \equiv a^{b \text{ } mod \text{ } \varphi(n)}(mod \text{ } n)$
证毕。
特别地,当 $a,n$ 不一定互质且 $b>\varphi(n)$ 时,有
$a^b \equiv a^{b \text{ } mod \text{ } \varphi(n)+\varphi(n)} (mod \text{ } n)$
证明方法:指数循环节,留个坑,以后再填。
应用:
许多计数类题目要求把答案对一个质数 $p$ 取模后输出,在计算 $a+b, a\ast b$ 这样的算式时,就可以先把 $a,b$ 对 $p$ 取模,再进行运算。而对于形如 $a^p$ 的乘方算式,可以先将底数 $a$ 对 $p$ 取模、指数 $p$ 对 $\varphi(n)$ 取模,再进行计算,避免溢出。
0x33 同余的更多相关文章
- 算法竞赛进阶指南0x33同余
定义 如果整数a,b除以正整数m的余数相同,那么a,b模m同余 . 知识点 拓展欧几里得算法 代码 #include <bits/stdc++.h> using namespace std ...
- float 对整形的取余运算
取余是针对整形的,但是有时候一些特殊需求,我们需要 float 型对整形取下余数.比如,将角度化到 0- 360 范围内. 今天看到 lua 的实现方式: a % b == a - math.floo ...
- JS利用取余实现toggle多函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- salesforce 零基础学习(四十三)运算取余
工作中遇到一个简单的小问题,判断两个数是否整除,如果不整除,获取相关的余数. 习惯java的我毫不犹豫的写下了代码 public Boolean isDivisibility(Integer divi ...
- poj1006Biorhythms(同余定理)
转自:http://blog.csdn.net/dongfengkuayue/article/details/6461298 本文转自head for better博客,版权归其所有,代码系本人自己编 ...
- PHP大数(浮点数)取余
一般我们进行取余运算第一个想到的就是用百分号%,但当除数是个很大的数值,超出了int范围时,这样取余就不准确了. php大数(浮点数)取余函数 /** * php大数取余 * * @param int ...
- NOIP2014 uoj20解方程 数论(同余)
又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...
- JAVA中取余(%)规则和介绍
在java中%的含义为取余. java :a%b 数学公式a%b=a-(a/b)*b
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
随机推荐
- RocketMQ与MYSQL事务消息整合
1.基础理论知识篇“两阶段提交”如果你了解可以跳过这段,当然如果你想深入了解你可以购买相关书籍或去搜索相关资料阅读 两阶段提交分为 正常提交和异常提交或异常回滚 上面是正常提交的示意图,协调者发起预提 ...
- C++ hdu 例题:不要62 题解
例题:不要62 同步数位DP 需要统计区间[l,r]的满足题意的数的个数,这往往可以转换成求[0,r]-[0,l) 基本思想与方法 有了上述性质,我们就可以从高到低枚举第一次<n对应位是哪一位. ...
- c# bool类型和int类型的互转
项目过程中,会有model的一些属性字段为‘是’或‘否’ 数据库字段一半定义为int,值则是0或1 数据库model转实体类的时候,bool和int可以直接相互转换 false强转int 值就是0 t ...
- Intent对象(组件间的通信原理)
Intent对象是一种可以在运行时动态绑定组件的关键技术,通过使用Intent对象,可以告诉系统你想要实现什么样的操作,也就是Intent对象里面包含的请求内容,请求再由Android操作系统接收到, ...
- java将复数字符串虚部实部分离,并实现加减运算
java字符串构造复数 将字符串分解为复数的实部和虚部 定义一个复数类,数据成员有实部和虚部,根据传参不同构造方法重载,并定义复数的加减方法,以及toString方法.有难度的便是用字符串构造复数了, ...
- .net持续集成cake篇之cake介绍及简单示例
cake介绍 Cake 是.net平台下的一款自动化构建工具,可以完成对.net项目的编译,打包,运行单元测试,集成测试甚至发布项目等等.如果有些特征Cake没有实现,我们还可以很容易地通过扩展Cak ...
- java学习笔记(基础篇)—java数组
一:什么是数组,什么时候使用数组? 数组是用来保存一组数据类型相同的元素的有序集合,数组中的每个数据称为元素.有序集合可以按照顺序或者下标取数组中的元素. 在Java中,数组也是Java对象.数组中的 ...
- 使用flink Table &Sql api来构建批量和流式应用(3)Flink Sql 使用
从flink的官方文档,我们知道flink的编程模型分为四层,sql层是最高层的api,Table api是中间层,DataStream/DataSet Api 是核心,stateful Stream ...
- D:苏卿念发红包
首先,题目中已经说得很明确了(按照常理也是). 当有mmm个包,你第kkk个抢.k>mk>mk>m的话.显然,平时会显示:来晚了一步,红包已经被领完了\text{来晚了一步,红包已经 ...
- JWT(JSON WEB TOKEN)实例
JWT的工具类 加密解密工具 package top.wintp.crud.util; import com.auth0.jwt.JWTSigner; import com.auth0.jwt.JWT ...