模运算学习笔记
# 前言
只知其一,不知其二
# 例题 POJ 1845 (opens new window)
由于该题的,计算等比数列和时,除数可能为的倍数,此时不可使用逆元计算。
#
前提: 为整数
证明:
存在整数使得
因此
注意上面的式子用的是等号而非同余
根据上述定理,可以使用以下代码求解本题
ll get_sum(ll p, ll t){ // 求 1, p, p^2 ... p^t 的和
// qpow(p, t, d) 以为p的t次方对d取余
ll div = (p-1) * mod;
ll ans = (qpow(p, t+1, div) - 1 + div) % div;
ans = ans / (p-1);
return ans % mod;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 逆元
若,且互质,那么就定义为在模意义下的逆元,记为
# 快速幂求逆元(费马小定理)
若p为素数, a为正整数, 且 互质。则有
因此,
# 线性求逆元
显然
对于当前,设使得,即.
那么,两边同时乘上
得:
即:
为避免负数,可改写为
inv[1] = 1;
for(int i=2; i<=n; i++){
inv[i] = (p - p / i) * inv[p % i] % p;
}
1
2
3
4
2
3
4
# 欧拉降幂
其中为欧拉函数(小于或等于的正整数中,与互质的数的个数,当为质数,)
其中第一条为欧拉降幂,剩余两条为广义欧拉降幂
上次更新: 2021/02/24, 03:37:30