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当时卡在了二叉树. ...
随机推荐
- Python中的字符编码
一.文本编辑器存取文件的原理: #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失 #2.要想永久保存,需要点击保存按钮:编辑器把内存的 ...
- .NET分布式框架 | Orleans 知多少
引言 公司物联网项目集成Orleans以支持高并发的分布式业务,对于Orleans也是第一次接触,本文就分享下个人对Orleans的理解. 这里先抛出自己的观点:Orleans 是一个支持有状态云生应 ...
- c++汉诺塔问题
c++解决汉诺塔问题 题目描述 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到中间的杆上 ...
- 微信小程序之楼层效果
今天做了一个小程序实现一个楼层效果 带大家分享下经验和api的使用吧 如图 将左边和右边各分了一个组件 目录如下 其中list页面是这个楼层效果的页面 components是组成这个页面的两个组件 ...
- 牛客小白月赛16 E 小雨的矩阵 ( 暴搜)
链接:https://ac.nowcoder.com/acm/contest/949/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- Java编程思想:File类list()方法
import java.util.regex.Pattern; import java.io.File; import java.io.FilenameFilter; public class Tes ...
- python函数知识四 迭代器、生成器
15.迭代器:工具 1.可迭代对象: 官方声明,只要具有__iter__方法的就是可迭代对象 list,dict,str,set,tuple -- 可迭代对象,使用灵活 #方法一: list.__ ...
- C#跟Lua如何超高性能传递数据
前言 在UWA学堂上线那天,我买了招文勇这篇Lua交互的课程,19块还算值,但是前段时间太忙,一直没空研究,他的demo是基于xlua的,今天终于花了大半天时间在tolua下跑起来了,记录一下我的理解 ...
- 洛谷P4304 [TJOI2013]攻击装置 题解
题目链接: https://www.luogu.org/problemnew/show/P4304 分析: 最大独立集 最大独立集=总点数-最大匹配数 独立集:点集,图中选一堆点,这堆点两两之间没有连 ...
- python面向过程编程 - ATM
前面程序整合加自定义日志 1.文件摆放 ├── xxxx │ ├── src.py │ └── fil_mode.py │ └── data_time.py │ └── loading.py │ └─ ...