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当时卡在了二叉树. ...
随机推荐
- 并发编程-concurrent指南-ReadWriteLock
ReadWriteLock也是一个接口,在它里面只定义了两个方法: public interface ReadWriteLock { /** * Returns the lock used for r ...
- Hive入门(三)分桶
1 什么是分桶 上一篇说到了分区,分区中的数据可以被进一步拆分成桶,bucket.不同于分区对列直接进行拆分,桶往往使用列的哈希值进行数据采样.在分区数量过于庞大以至于可能导致文件系统崩溃时,建议使用 ...
- SPOJ:NPC2016A(数学)
http://www.spoj.com/problems/NPC2016A/en/ 题意:在一个n*n的平面里面,初始在(x,y)需要碰到每条边一次,然后返回(x,y),问最短路径是多长. 思路:像样 ...
- HDU 5618:Jam's problem again(CDQ分治+树状数组处理三维偏序)
http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意:…… 思路:和NEUOJ那题一样的.重新写了遍理解了一下,算作处理三维偏序的模板了. #includ ...
- Ng-Matero:基于 Angular Material 搭建的中后台管理框架
前言 目前市面上关于 Angular Material 的后台框架比较少,大多都是收费主题,而且都不太好用. 很多人都说 Material 是一个面向 C 端的框架,其实在使用其它框架做管理系统的时候 ...
- JAVA接口的继承与集合
复习 20190701 接口补充 一. java是单继承多实现 单继承: 一个类只能有一个父类 public class D extends D1 { } 2. 多实现 一个类可以同时实现多个接口 当 ...
- 【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的
#### 每篇一句 > 具备了技术深度,遇到问题可以快速定位并从根本上解决.有了技术深度之后,学习其它技术可以更快,再深入其它技术也就不会害怕 #### 相关阅读 [[小家Spring]聊聊Sp ...
- Pygame安装问题
1.首先使用如下命令: conda install -c https://conda.anaconda.org/quasiben pygame 测试报错: >>> import py ...
- 通过windug判断某个模块导致程序不能退出。
1.windug附加进程. 2.~* kb 3.看堆栈
- Java学习笔记之---Servlet
Java学习笔记之---Servlet (一)如何实现Servlet 1.实现javax.servlet.Servlet接口: 2.继承javax.servlet.GenericServlet类: 3 ...