定义

若整数 $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 同余的更多相关文章

  1. 算法竞赛进阶指南0x33同余

    定义 如果整数a,b除以正整数m的余数相同,那么a,b模m同余 . 知识点 拓展欧几里得算法 代码 #include <bits/stdc++.h> using namespace std ...

  2. float 对整形的取余运算

    取余是针对整形的,但是有时候一些特殊需求,我们需要 float 型对整形取下余数.比如,将角度化到 0- 360 范围内. 今天看到 lua 的实现方式: a % b == a - math.floo ...

  3. JS利用取余实现toggle多函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. salesforce 零基础学习(四十三)运算取余

    工作中遇到一个简单的小问题,判断两个数是否整除,如果不整除,获取相关的余数. 习惯java的我毫不犹豫的写下了代码 public Boolean isDivisibility(Integer divi ...

  5. poj1006Biorhythms(同余定理)

    转自:http://blog.csdn.net/dongfengkuayue/article/details/6461298 本文转自head for better博客,版权归其所有,代码系本人自己编 ...

  6. PHP大数(浮点数)取余

    一般我们进行取余运算第一个想到的就是用百分号%,但当除数是个很大的数值,超出了int范围时,这样取余就不准确了. php大数(浮点数)取余函数 /** * php大数取余 * * @param int ...

  7. NOIP2014 uoj20解方程 数论(同余)

    又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...

  8. JAVA中取余(%)规则和介绍

    在java中%的含义为取余. java :a%b 数学公式a%b=a-(a/b)*b

  9. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

随机推荐

  1. VirtualBox中安装CentOS使得在ssh和外网都能正常链接

    一.网卡模式选择 网卡1:Host-only 用于主宿机互访,这是主宿机通过192.168.56.X这一网络通信,主机是否能上网不影响双方通信 网卡2:NAT 宿机用这一网卡通过主机上网 二.具体配置 ...

  2. 记一次SQL优化。

    程序是数据库的用户,为打造良好的用户体验,我们一直在努力. 此次介绍一个基于SQL的数据库优化.SQL的优劣对数据库的性能影响非常关键. 查询只涉及如下表结构中的三个字段.如下 开发原始SQL SEL ...

  3. POJ 3686:The Windy's(最小费用最大流)***

    http://poj.org/problem?id=3686 题意:给出n个玩具和m个工厂,每个工厂加工每个玩具有一个时间,问要加工完这n个玩具最少需要等待的平均时间.例如加工1号玩具时间为t1,加工 ...

  4. flask高级编程 LocalStack 线程隔离

    转:https://www.cnblogs.com/wangmingtao/p/9372611.html   30.LocalStack作为线程隔离对象的意义 30.1 数据结构 限制了某些能力 30 ...

  5. ZigBee入门第一天

    按键查询控制灯的状态 1.宏定义灯和按键 2.按键和灯初始化 3.用if语句消抖的方法,实现按键控制灯的状态 相关寄存器 PxSEL PxDIR #include"ioCC2530.h&qu ...

  6. 利用Jmeter模拟Github登录

    最近学习了Jmeter的简单操作,很想找点东西来实战一下,因为我之前写过一篇通过Python模拟登录的文章,于是便想尝试下学习通过Jmeter来模拟登录. 本人环境:Jmeter5.1.1 关于Git ...

  7. python笔记(2)--字符串

    一.字符串 字符串是不可变序列,具有序列的公共操作方法,具体操作见python笔记(1)--序列(列表 元组 range) 1.创建字符串 单引号:'Hello , I am Logan ! ' 双引 ...

  8. 聊聊C语言的预编译指令include

    "include"相信大家不会陌生,在我们写代码时,开头总会来一句"include XXX".include是干嘛用的,很多教材都提到了,因此这里不会再详细解释 ...

  9. 20131207-ADO.NET-第十六天

    [1]快捷键 工具箱:ctrl+w+x 首字母定位控件范围 属性:F4 或ctrl+w+p Tab跳转 ,home 与end也有效 [2]连接字符串 string str = "Data S ...

  10. 【Netty】Netty简介及服务器客户端简单开发流程

    什么是Netty Netty是一个基于Java NIO的编写客服端服务器的框架,是一个异步事件框架. 官网https://netty.io/ 为什么选择Netty 由于JAVA NIO编写服务器的过程 ...