Day 25 - 同余与乘法逆元
1|0欧拉函数
1|1定义
欧拉函数(
比如说
当
1|2性质
-
欧拉函数是积性函数。
即对任意满足
的整数 ,有 。特别地,当
是奇数时 。证明参见剩余系的复合。
-
。证明:
利用莫比乌斯反演相关知识可以得出。
也可以这样考虑:如果
,那么 。如果我们设
表示 的数的个数,那么 。根据上面的证明,我们发现,
,从而 。注意到约数 和 具有对称性,所以上式化为 。 -
若
,其中 是质数,那么 。
(根据定义可知) -
由唯一分解定理,设
,其中 是质数,有 。证明:
-
引理:设
为任意质数,那么 。证明:显然对于从 1 到
的所有数中,除了 个 的倍数以外其它数都与 互素,故 ,证毕。接下来我们证明
。由唯一分解定理与 函数的积性
-
-
对任意不全为
的整数 , 。可由上一条直接计算得出。
1|3实现
如果只要求一个数的欧拉函数值,那么直接根据定义质因数分解的同时求就好了。这个过程可以用
注:如果将上面的程序改成如下形式,会提升一点效率:
1|4欧拉定理
与欧拉函数紧密相关的一个定理就是欧拉定理。其描述如下:
若
1|5扩展欧拉定理
当然也有扩展欧拉定理
2|0裴蜀定理
2|1定义
裴蜀定理,又称贝祖定理、贝祖等式。是一个关于最大公约数的定理。
其内容是:
设
2|2证明
对于第一点
由于
所以
因此
对于第二点
-
若任何一个等于
, 则 . 这时定理显然成立。 -
若
不等于 .由于
,不妨设
都大于 , .对
, 两边同时除以 , 可得 , 其中 .转证
.我们先回顾一下辗转相除法是怎么做的,由
我们把模出来的数据叫做 于是,有把辗转相除法中的运算展开,做成带余数的除法,得
不妨令辗转相除法在除到互质的时候退出则
所以有( 被换成了 ,为了符合最终形式)即
由倒数第三个式子
代入上式,得然后用同样的办法用它上面的等式逐个地消去
,可证得
.
这样等于是一般式中 的情况。
2|3推广
逆定理
设
特殊地,设
多个整数
裴蜀定理可以推广到
2|4应用
给出
分析该问题,发现想要跳到每一个格子上,必须使得所选数
解法 1:我们可以转移思想,因为这些数互质,即为
由于:互质即为最大公因数为
不过还有个问题,即为需要记录是否已经买过一个卡片,开数组标记由于数据范围达到 unordered_map
(比普通的 map
更快地访问各个元素,迭代效率较低)
解法 2:从数组
设
DP 后最终的总代价即为
如同一般的 0-1 背包问题,可以用滚动数组优化,去掉第一维。而这里 300 个数可达的最大公因数 unordered_map
代替数组储存下标
实际上,这里解法 1 建出的图便是解法 2 中动态规划的状态转移图,解法 2 相当于用动态规划求有向无环图的最短路,因此解法 1 和解法 2 是等价的。但解法 2 无需储存全图,同时 DP 的时间复杂度为
2|5进一步结论
对自然数
其中 x 和 y 为自然数。如果方程有解,称 n 可以被 a、b 表示。
记
对任意的整数 n,n 与
即:可表示的数与不可表示的数在区间
证明
由于 a、b 互素,因此原方程有整数解。设解为:
其中 t 为整数。取适当的 t,使得 y 位于 0 到
第一步:证明大于 C 的数都可以被表示。当 n 大于 C 时:
于是 x 也是非负整数。
第二步:证明 C 不可被表示,进而 n 与
反证法。若
由于 a 与 b 互素,所以 a 整除
矛盾!第二步证完。
第三步:证明如果 n 不可被表示,则
由上可知,若 n 不可被表示,由于上述方程中已规定 y 在 0 到
显然
几何意义
重新观察方程
当
根据上述讨论:当 n 可以被表示的时候,直线恰好经过一个整点;当 n 不可以被表示的时候,直线不经过整点(在第一象限)。
这结论也可以理解为:作三角形
因此,小于等于 n 的能被表示的非负整数的数量,恰好就是直线
另一种解释
考虑模 b 意义下每个剩余系中最小能被表示的值是多少——大于他们的可以通过增加若干个 b 得到。
观察原方程,a 的若干倍数
这是一个非常经典的直线下整点问题,恰好是这条直线:
即
使用类欧几里得算法可以在
题目
P3951 NOIP2017 提高组 小凯的疑惑/蓝桥杯 2013 省 买不到的数目
3|0费马小定理 & 欧拉定理
3|1费马小定理
定义
若
另一个形式:对于任意整数
证明
设一个质数为
构造一个序列:
证明:
又因为每一个
得证(每一个
设
证毕。
也可用归纳法证明:
显然
因为
3|2欧拉定理
在了解欧拉定理(
定义
若
证明
实际上这个证明过程跟上文费马小定理的证明过程是非常相似的:构造一个与
设
当
3|3扩展欧拉定理
定义
解释
读者可能对第二行产生疑问,这一行表达的意思是:如果
主要是因为题目中
证明
直观理解
需要知道的是,在
在扩展欧拉定理中,循环分为纯循环和混循环。其中纯循环中不存在节点有两个前驱,而混循环则反之。而
值得注意的是,无论是费马小定理,还是(扩展)欧拉定理,一个很重要的应用就是降幂,从而将不可能的表达式化为可能。
形式证明
证明转载自 synapse7,并进行了一些整理。
-
命题:
的从 次, 次到 次幂模 构成的序列中,存在 和 ,使得前 个数(即从 到 )互不相同,从第 个数开始,每 个数就循环一次。证明:
-
由鸽巢定理易证。
我们把
称为 幂次模 的循环起始点, 称为循环长度。(注意: 可以为 )用公式表述为:
-
-
命题:
为素数的情况,该式成立。证明:
-
若模
不能被 整除,而因为 是一个素数,那么 成立,根据欧拉定理,容易证明该式成立。 -
若模
能被 整除,那么存在 和 使得 ,且 成立。所以根据欧拉定理有 。又由于
,所以根据欧拉函数的求值规则,容易得到: ,即我们有: 。所以
,即 ,两边同时乘以 ,得 (因为 )所以对于
中素因子 的次数 满足: 。我们可以简单变换形式,得到 推论:又由于
,所以 (tips: 是素数,最小是 ,而 )。所以因为
,故有:所以
即
。
-
-
命题:
为素数的幂的情况,该式成立。证明:
-
不妨令
,是否依然有 ?答案是肯定的,由命题 1 可知存在
使得 ,所以 ,所以令 时,我们能有 。此时有关系:
且 ,且 ,由 与 的关系,依然可以得到 。
-
-
命题:
为合数的情况,该式成立。证明:
-
只证
拆成两个素数的幂的情况,大于两个的用数学归纳法可证。设
,其中 ,而 的循环长度为 ;则
,由于 ,那么 ,所以 , ;由
与 的关系,依然可以得到 。证毕。
-
3|4习题
- SPOJ #4141 "Euler Totient Function"[Difficulty: CakeWalk]
- UVa #10179 "Irreducible Basic Fractions"[Difficulty: Easy]
- UVa #10299 "Relatives"[Difficulty: Easy]
- UVa #11327 "Enumerating Rational Numbers"[Difficulty: Medium]
- TIMUS #1673 "Admission to Exam"[Difficulty: High]
4|0乘法逆元
4|1定义
如果一个线性同余方程
4|2如何求逆元
扩展欧几里得法
实现:
扩展欧几里得法和求解线性同余方程是一个原理,在这里不展开解释。
快速幂法
证明
因为
所以
所以
然后我们就可以用快速幂来求了。
实现:
注意:快速幂法使用了费马小定理,要求
线性求逆元
求出
如果对于每个数进行单次求解,以上两种方法就显得慢了,很有可能超时,所以下面来讲一下如何线性(
首先,很显然的
证明:
对于
其次对于递归情况
两边同时乘
再带入
我们注意到
故我们就可以推出逆元,利用递归的形式,而使用迭代实现:
实现:
使用
另外我们注意到我们没有对 inv[0]
进行定义却可能会使用它:当 inv[p % i]
,也就是 inv[0]
,这是因为当 inv[i]
的值是未定义的。
另外,根据线性求逆元方法的式子:
递归求解
中间优化可以加入一个记忆化来避免多次递归导致的重复,这样求
注意:如果用以上给出的式子递归进行单个数的逆元求解,目前已知的时间复杂度的上界为
线性求任意 n 个数的逆元
上面的方法只能求
首先计算
因为
同理我们可以依次计算出所有的
所以我们就在
实现:
4|3逆元练习题
5|0线性同余方程
5|1定义
形如
的方程称为 线性同余方程(
5|2用逆元求解
首先考虑简单的情况,当
此时可以计算
证明
接下来考虑
设
当
如果
其中
很明显,
总之,线性同余方程的 解的数量 等于
5|3用扩展欧几里得算法求解
根据以下两个定理,可以求出线性同余方程
定理 1:线性同余方程
其中
应用扩展欧几里德算法可以求解该线性不定方程。根据定理 1,对于线性不定方程
于是找到方程的一个解。
定理 2:若
并且对任意整数
根据定理 2,可以从已求出的一个解,求出方程的所有解。实际问题中,往往要求出一个最小整数解,也就是一个特解
其中有
如果仔细考虑,用扩展欧几里得算法求解与用逆元求解,两种方法是等价的。
实现
代码实现:
本页面主要译自博文 Модульное линейное уравнение первого порядка 与其英文翻译版 Linear Congruence Equation。其中俄文版版权协议为 Public Domain + Leave a Link;英文版版权协议为 CC-BY-SA 4.0。
习题
__EOF__

本文链接:https://www.cnblogs.com/So-noSlack/p/18335879.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:So_noSlack,转载请注明原文链接:https://www.cnblogs.com/So-noSlack/p/18335879
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)