2025西安交大集训Day11:排列组合,扩展欧几里得,素数筛,欧拉函数,容斥原理逆元,BSGS,莫比乌斯反演,LUCAS定理
快速幂
快速幂是我们解决中数论问题的基石让我们能以 \(O(logn)\) 的复杂度计算 \(a^n\)
快速幂的思想简单而言就是将 \(n\) 的二进制中所有的 \(1\) 代表的次幂乘起来比如计算 \(3^5,5=(101)_2\) ,则使用快速幂计算 \(3^5\) 的过程就是 \(3^{(1)_2}\times 3^{(100)_2}\)
参考代码如下:
int fp(int x, int y) {
int res = 1;
for (; y; y >>= 1, x = 1ll * x * x % mod) {
if (y & 1) {
res = 1ll * res * x % mod;
}
}
}
同余
设整数 \(m\mid(a-b)\) ,则我们称 \(\alpha\) 同余于 \(b\) 模 \(m\) ,记作 \(a\equiv b\pmod m.\)
同余可以理解为模意义下的相等.
同余满足如下性质:
- 线性运算:若 \(a \equiv b \pmod{m}\),$ c \equiv d \pmod{m} $ ,则 \(a \pm c \equiv b \pm d \pmod{m}\),\(a \times c \equiv b \times d \pmod{m}\)。
- 若 \(a \equiv b \pmod{m}\),\(k \in \mathbb{N}_{+}\),则 \(ak \equiv bk \pmod{mk}\)。
- 若 \(a \equiv b \pmod{m}\),\(d | m\),则 \(\frac{a}{d} \equiv \frac{b}{d} \pmod{\frac{m}{d}}\)。
同余类:设 \(m\in\mathbb{N}_+\) ,则可以将全体整数分为 \(m\) 个划分,每个集合满足其中的数模 \(m\) 均同
余,将这 \(m\) 个集合称为模 \(m\) 的剩余类,用 \(r\bmod m\) 表示含有 \(r\) 的模 \(m\) 的剩余类。
完全剩余系:对 \(m\) 个整数 \(a_1,a_2,\ldots,a_m\) ,若对任意整数 \(x\) ,有且仅有一个数满足 \(a_i\equiv x({\mathrm{mod~}}m)\) ,则称这 \(m\) 个数为模 \(m\) 的完全剩余系.在 OI 中常用最小非负剩余系,即:
\]
最大公约数(\(gcd\))
\(a\) 和 \(b\) 的最大公约数 \(\gcd(a,b)\) 定义为所有满足 \(c\mid a,c\mid b^1\) 的 \(c\) 的最大值(\(c\) 为 \(a,b\) 的公约数).最大公约数有
如下性质:
- 结合律:\(\gcd(a_1,a_2,\ldots,a_n)=\gcd(\gcd(a_1,a_2),\ldots,a_n)\)
- 分配律:\(\gcd(ma_1,ma_2,\ldots,ma_n)=m\gcd(a_1,a_2,\ldots,a_n).\)
最大公约数 \(gcd\) 与最小公倍数 \(lcm\) 有如下关系:
\]
在 OI 中,我们通过辗转相除法的方法来求最大公约数.即 \(\gcd(a,b)=\gcd(b,a\) mod \(b)^3.\)
这个算法的时间复杂度是 \(O(\log a).\)
证明略.
代码如下:
int gcd(int a, int b) {
reutrn b ? gcd(b, a % b) : a;
}
扩展欧几里得算法(Extended Euclidean Algorithm, Exgcd),常用于求不定方程 \(ax + by = gcd(a, b)\) 的一组解。具体流程如下:
设
ax_1 + by_1 = \text{gcd}(a, b) \\
bx_2 + (a \mod b)y_2 = \text{gcd}(b, a \mod b)
\end{cases}\]
由于 \(\text{gcd}(a, b) = \text{gcd}(b, a \mod b)\),于是
& ax_1 + by_1 = bx_2 + (a \mod b)y_2 \\
&= bx_2 + ay_2 - \left\lfloor \frac{a}{b} \right\rfloor y_2 \times b \\
&= ay_2 + b\left(x_2 - \left\lfloor \frac{a}{b} \right\rfloor y_2\right)
\end{aligned}\]
于是 \(x_1 = y_2\), \(y_1 = x_2 - \left\lfloor \frac{a}{b} \right\rfloor y_2\).
将 \(x_2, y_2\) 递归,直至 \(\text{gcd}\) 为 \(0\) 时将 \(x = 1, y = 0\) 代入计算即可。
参考代码如下:
int exgcd(int a, int b, int& x, int& y) {
cout << x << " " << y << "\n";
if (!b) {
x = 1, y = 0;
return a;
}
int ans = exgcd(b, a % b, x, y);
int tmp = x;
x = y;
y = tmp - a / b * y;
return ans;
}
费马小定理
·对素数\(p\)以及任意自然数 \(a\) ,有 \(a^p\equiv a\pmod{p}.\)
·对素数\(p\)以及与其互素的自然数 \(a\) ,有 \(a^{p-1}\equiv1\pmod{p}.\)
我们使用数学归纳法证明这一定理,对于 \(\alpha=1\) ,显然结论成立.假设 \(p\mid(a^p-a)\) ,现在讨论
\(a+1\) 时的情况,即要证明 \(p\mid((a+1)^p-(a+1)).\)
将右侧使用二项式定理展开,则
\]
由于 \(p\) 是素数,故而对任意的 \(k,p\mid\binom pk.\) 由假设的结论可以得到 \(p\mid(a+1)^p-(a+1).\) 故费马小定理成立.
费马定理是欧拉定理:\(a^\varphi(m)\equiv1 \pmod m)(\gcd(a,m)=1)\) 的一个特殊情况,其中 \(\varphi(m)\) 是欧拉函数.
若 \(x\) 满足 \(ax \equiv 1 \pmod{b}\),则称 \(x\) 是在模 \(b\) 意义下 \(a\) 的乘法逆元,记作 \(a^{-1}\).
- 求逆元的方法:
- Exgcd 求逆元:相当于求 \(ax + by = 1\),要求 \(\gcd(a,b) = 1\)。
- 费马小定理求逆元:由 \(a^{p-1} \equiv 1 \pmod{p}\) 有 \(a^{-1} \equiv a^{p-2} \pmod{p}\),快速幂即可。要求 \(p\) 是素数。
- 线性求 \(1 \sim n\) 的逆元:令 \(p = kx + y\),则 \(k = \left\lfloor \frac{p}{x} \right\rfloor\)。有 \(kx + y \equiv 0 \pmod{p}\)。两边同时乘 \(x^{-1} \times y^{-1}\)。得到 \(x^{-1} \equiv -ky^{-1} \pmod{p}\)。递推即可。
void Inv(int n, int p) {
inv[1] = 1;
for (int i = 2; i <= n; ++i) {
inv[i] = (long long)(p - p / i) * inv[p % i] % p;
}
}
中国剩余定理
对一组互质的整数 \(\{a_n\}\),求
\(\begin{cases}
x \equiv b_1 \pmod{a_1}\\
x \equiv b_2 \pmod{a_2}\\
\vdots\\
x \equiv b_n \pmod{a_n}
\end{cases}\)
的解.
令 \(a=\prod a_{i},m_{i}=\frac{\alpha}{a_{i}}\),求出 \(m_{i}\) 在 \(a_{i}\) 下的逆元,记作 \(m_{i}^{-1}.\) 令 \(c=m_{i}m_{i}^{-1}\) (不取模).则
\]
是上述方程在模 \(a\) 意义下的唯一解.
现在我们要证明 \(x\) 在模 \(a_i\) 的意义下同余 \(b_i:\) 因为当 \(j\neq i\) 时,\(b_jc_j\equiv0\) (mod \(a_i)\),于是
\]
LUCAS定理
Lucas 定理是在素数剩余系下求组合数的常用方法.具体地,对正整数 \(n,m\) 以及质数 \(p\) ,有
\]
证明略.
BSGS
\(\mathbf{BSGS}\) 算法,常用来求解 \(a^x\equiv b\) (mod \(p)\) ,其中 \(a\perp p\),且要求 \(x\in[0,p).\)
\(令\) \(x= A\sqrt {p}- B( A, B< \sqrt {p})\),则方程变为
\]
枚举 \(B\) ,将所有的 \(ba^B\) 存下来,然后再枚举 \(A\) ,计算 \(a^{A\sqrt{p}}\) ,检查是否有相等的值,若有则可以通过 $A,B $求出 \(x.\)
时间复杂度:\(O(\sqrt p).\)
扩展欧拉定理
扩展欧拉定理拓宽了欧拉定理对于\(a,p\)互素的限制,有:
\]
证明略.
扩展欧拉定理主要用于降幂.
积性函数
设\(f:\mathbb{Z}^{+}\rightarrow A\subseteq \mathbb{C}\), 则这样的函数 \(f\) 称作数论函数.
若数论函数 \(f\) 满足对于任意互素的两个数\(a,b\), 都有\(f(ab)=f(a)f(b)\), 且 \(f(1)=1\). 则 \(f\) 被称作积性函数.
若数论函数 \(f\) 满足对任意两个数\(a,b\) 都有 \(f(ab)=f(a)f(b)\), 且 \(f(1)=1\). 则 \(f\) 被称作完全积性函数.
积性函数满足如下性质:
- 若 \(f(x)\) 是积性函数, 则对于任意的素数\(p,f(x^p)\) 也是积性函数;
- 若 \(f,g\) 是积性函数, 则 \(h=fg\) 也是积性函数;
- 若 \(f,g\) 是积性函数, 则 \(h=f*g=\sum_{d|x} f(d)g(\frac{x}{d})\) 也是积性函数.[7]
- 若\(x=\prod p_i^{k_i}\) (即质因数分解), 则当\(f(x)\) 是积性函数时, 有\(f(x)=\prod f(p_i^{k_i}).\)
[7]: 实际上是 \(f,g\) 的迪利克雷卷积, 我们将在后面的课程仔细研究.
\(\begin{aligned}
& 接下来列举一些常见的积性函数: \\
& 1.\text{ 单位函数: }\varepsilon(n)=[n=1]^{8}; \\
& 2.\text{ 恒等函数:id}_k(n)=n^k,\mathrm{id}_1(n)\text{ 简记为 id}(n); \\
& 3.\text{ 常数函数:}1\left(n\right)=1; \\
& 4.\text{ 除数函数:}\sigma_k(n)=\sum_{d|n}d^k,\sigma_0(n)\text{ 常简记为 d}(n)\text{ 或 }\tau(n),\sigma_1(n)\text{ 常简记为 }\sigma(n);^9 \\
& \text{5. 欧拉函数:}\varphi(n)=\sum_{k=1}^n[\gcd(k,n)=1],\text{即在 }1\sim n\text{ 中有多少数与其互素}; \\
& \text{6. 莫比乌斯函数:}\mu(n)=
\begin{cases}
1,n=1 \\
0,\exists d>1:d^2\mid n \\
(-1)^{\omega(n)},\mathrm{otherwise} &
\end{cases},\text{其中 }\omega(n)\text{表示 }n\text{的本质不同质因子个} \\
& 我们将对\varphi\text{ 和 }\mu\text{ 做仔细研究}. \\
& \overline{^8[]\text{ 代表艾佛森括号,括号内命题为真则为 }1,\text{否则为 }0} \\
& ^9\tau(n)\text{ 表示 }n\text{ 的因子个数},\sigma(n)\text{ 表示 }n\text{ 的因数和}.
\end{aligned}\)
欧拉函数
\(\begin{aligned}
& 欧拉函数有如下性质: \\
& \bullet\varphi(2n)=\varphi(n)(\text{当 }n\text{ 是奇数时}); \\
& \bullet n=\sum_{d|n}\varphi(d); \\
& \text{设}f(k)=\sum_{i=1}^n[\gcd(i,n)=k],\text{则}\sum f(k)=n,\text{又因为}f(k)=\varphi\left(\frac{n}{k}\right),\text{故上述命题得证}. \\
& \bullet\varphi\left(p^{k}\right)=p^{k}-p^{k-1}=\varphi\left(p^{k-1}\right)\times p; \\
& \bullet\text{设 }m=\prod_{p}p^{m_{p}},\text{则} \\
& \varphi\left(m\right)=\varphi\left(\prod_{p}p^{m_{p}}\right)=\prod_{p}\varphi\left(p^{m_{p}}\right)=\prod_{p}(p^{m_{p}}-p^{m_{p}-1})=m\prod_{p}\left(1-\frac{1}{p}\right) \\
& \text{通过这个式子可以做到单点求 }\varphi,\text{时间复杂度为 }O(\sqrt{m}).
\end{aligned}\)
2025西安交大集训Day11:排列组合,扩展欧几里得,素数筛,欧拉函数,容斥原理逆元,BSGS,莫比乌斯反演,LUCAS定理的更多相关文章
- 欧拉函数线性求解以及莫比乌斯反演(Mobius)
前言 咕咕了好久终于来学习莫反了 要不是不让在机房谁会发现数学一本通上有这么神奇的东西 就是没有性质的证明 然后花了两节数学课证明了一遍 舒服- 前置知识:欧拉函数,二项式定理(组合数) 会欧拉函数的 ...
- 学习sql中的排列组合,在园子里搜着看于是。。。
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...
- ACM数论-欧几里得与拓展欧几里得
ACM数论——欧几里得与拓展欧几里得 欧几里得算法: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd ...
- [洛谷P5106]dkw的lcm:欧拉函数+容斥原理+扩展欧拉定理
分析 考虑使用欧拉函数的计算公式化简原式,因为有: \[lcm(i_1,i_2,...,i_k)=p_1^{q_{1\ max}} \times p_2^{q_{2\ max}} \times ... ...
- gcd模板(欧几里得与扩展欧几里得、拓展欧几里得求逆元)
gcd(欧几里得算法辗转相除法): gcd ( a , b )= d : 即 d = gcd ( a , b ) = gcd ( b , a mod b ):以此式进行递归即可. 之前一直愚蠢地以为辗 ...
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- 素数筛&&欧拉筛
折腾了一晚上很水的数论,整个人都萌萌哒 主要看了欧拉筛和素数筛的O(n)的算法 这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体 ...
- HDU 1695 GCD(欧拉函数+容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...
- hdu 6390 欧拉函数+容斥(莫比乌斯函数) GuGuFishtion
http://acm.hdu.edu.cn/showproblem.php?pid=6390 题意:求一个式子 题解:看题解,写代码 第一行就看不出来,后面的sigma公式也不会化简.mobius也不 ...
- hdu (欧拉函数+容斥原理) GCD
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695 看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/ar ...
随机推荐
- Linux下本地yum源配置及局域网yum配置
1.Linux下本地yum源配置 本地yum源依赖于python解析,首先要确保系统的python和yum源安装完成 1.1.本地yum源配置及挂载 上传ISO镜像或使用本机镜像,使用mount命令挂 ...
- API网关-APISIX简介
本文分享自天翼云开发者社区<API网关-APISIX简介>,作者:w****n Apache APISIX 是一个动态.实时.高性能的云原生 API 网关,提供了负载均衡.动态上游.灰度发 ...
- 玩转云端 | 天翼云边缘安全加速平台AccessOne实用窍门之多款产品管理难?一站式平台管理全hold住!
随着数字化转型深入推进,企业信息化建设成效显著,同时其所面临的安全与性能挑战也日趋复杂,既要确保业务系统的安全性,同时也要提供快速.流畅的用户体验,以提升用户满意度和业务竞争力. 在传统的解决方案中, ...
- go的math/rand随机数生成器
伪随机数生成器,默认情况下随机数种子是固定的, 注意:固定的随机数种子每次生成的随机数都是相同的随机数序列 一.基础用法 math/rand 包提供了随机数生成的方法.常用的函数包括: rand.In ...
- 关于hystrix.contrib.javanica.exception.FallbackDefinitionException: fallback method wasn't found异常
在Spring中使用断路器后可能会遇到:com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException: fall ...
- CART回归树基本原理(具体例子)
id3不能直接处理连续性的特征,需要将连续性的转化成离散的,但是会破坏连续性特征的内在结构. 一.概念 CART全称叫Classification and Regression Tree.首先要强调的 ...
- TDH - 如何显示Guardian Client角色
注意:本博客适用TDH版本4.3.x 默认该页面的 Guardian Client 是隐藏的,如果需要对 Guardian Client角色进行什么操作的话,需要先将 Guardian Client角 ...
- Deepseek学习随笔(12)--- 清华大学发布第4弹:DeepSeek+DeepResearch让科研像聊天一样简单(附网盘链接)
一.文档简介 清华大学发布的<DeepSeek+DeepResearch让科研像聊天一样简单>介绍了如何通过DeepSeek和DeepResearch工具简化科研流程,提升研究效率.文件分 ...
- linux 删除文件提示 opration not permitted 处理方法(宝塔删除文件提示无法删除)
问题描述:linux系统中使用rm -rf强制删除文件,提示 opration not permitted,无法删除成功(宝塔删除文件提示无法删除),该问题确定为已关闭所有安全软件及防止恶意篡改的软件 ...
- C#弃元表达式的用法
原文地址:http://cshelloworld.com/home/detail/1803462343674433536 弃元符号是什么 弃元符号在C#中只是一个下划线 _,当程序员不想关注某些变量的 ...