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当时卡在了二叉树. ...
随机推荐
- 微服务-springcloud学习资料链接
API文档:https://springcloud.cc/spring-cloud-dalston.html#_spring_cloud_netflix 中文社区:http://springcloud ...
- c++复杂桶排序Java版
c++复杂桶排序Java版 题目和我的前几个排序一样 这次是Java版的 代码 + 注释 package com.vdian.qatest.supertagbiz.test.niu; /** * Cr ...
- 寻觅Azure上的Athena和BigQuery(一):落寞的ADLA
AWS Athena和Google BigQuery都是亚马逊和谷歌各自云上的优秀产品,有着相当高的用户口碑.它们都属于无服务器交互式查询类型的服务,能够直接对位于云存储中的数据进行访问和查询,免去了 ...
- synchronized与ReentrantLock实现共享资源的消费
主方法 public class synchronizedTest { public static void main(String[] args) { long startTime = System ...
- 转: windows系统下mysql出现Error 1045(28000) Access Denied for user 'root'@'localhost'
windows系统下mysql出现Error 1045(28000) Access Denied for user 'root'@'localhost' 转自 http://zxy5241.space ...
- Spring WebFlux之HttpHandler的探索
这是本人正在写的<Java 编程方法论:响应式Reactor3.Reactor-Netty和Spring WebFlux>一书的文章节选,它是<Java编程方法论:响应式RxJava ...
- 学习4:总结# 1.列表 # 2.元祖 # 3.range
列表 -- list 有序,可变的,索引, 作用:存储数据的,支持很多种数据类型 定义方式: lst = [1,"alex","黑哥"] 增: append 追 ...
- 20190719 NOIP模拟测试6 (考后反思)
总分 130 排名第6 虽然与前几次进步了一些,但总会感觉到不安 因为我只是A掉了第一题,而第一题又是道水题,很显然的DP,我相信大佬们没A掉只是因为一些小问题(也许有大佬不屑于这种题吧,lockey ...
- 入职两个月,WPF开发感想
1 .新工作,新开始 2.WPF初次接触以及学习MVVM开发模式 3.后台数据操作,ORACLE 存储过程(边做边学) 4.总结 4.1工作开发中的小问题 ,遇到的坑: 4.2 解决的问题,学校到的 ...
- C#4.0新增功能02 命名实参和可选实参
连载目录 [已更新最新开发文章,点击查看详细] C# 4 介绍命名实参和可选实参. 通过命名实参,你可以为特定形参指定实参,方法是将实参与该形参的名称关联,而不是与形参在形参列表中的位置关联. ...