【数论】——欧拉定理与快速幂
欧拉定理
- 若正整数 a,b 互质,则有:(其中: 为欧拉函数)
推论
- 费马小定理 若 p 是质数,则对于任意整数 a,有:
- 证明(构造函数法)——(来自 李煜东 《算法竞赛进阶指南》)
- 若正整数 a,n 互质,则对任意正整数 a 有:
- 证明(构造函数法)——(来自 李煜东 《算法竞赛进阶指南》)
快速幂
- 反复平方法 k 位二进制可以表示所有 [1,] 的所有数(状态压缩),由此性质,对于给定一个取模数 p,预处理:
然后将根据所求数的二进制表示每一位取出相乘即可求出要求的幂。
- 代码
int qickmi(int a,int k,int p)// a^k%p
{
int res = 1;
// 要转为 LL 防止溢出
while(k){if(k&1)
res = (long long)res * a % p;
a = (long long)a * a % p;
k >>= 1;
}
return res;
}
乘法逆元
- 定义 若 b,m 互质,并且有 ,则存在一个整数 x,使得
称 x 为 b mod m 的乘法逆元,记作:
变形后也可以得到:
- 如果m是质数,则根据费马小定理:
代入上式
根据乘法逆元定义式,此时b的乘法逆元为:
- 调用快速幂即可求出逆元,在求组合数时会派上用场