Chgtaxihe's blog Chgtaxihe's blog
首页
练习
算法学习
读书笔记
小玩意

Chgtaxihe

首页
练习
算法学习
读书笔记
小玩意
  • 数论

    • 一些小问题
    • 二次剩余学习笔记
    • 卡特兰数学习笔记
    • 同余最短路学习笔记
    • 康托展开学习笔记
    • 快速傅里叶变换学习笔记
    • 拉格朗日插值学习笔记
    • 拓展欧几里得学习笔记
    • 斐波那契数列学习笔记
    • 斯特林数笔记
    • 本原勾股数组学习笔记
    • 模运算学习笔记
      • $a/b \% c = a \% (b*c)/b$
      • 快速幂求逆元(费马小定理)
      • 线性求逆元
    • 欧拉函数
    • 类欧几里得学习笔记
    • 素性检测与大数分解
    • 素数计数问题
    • 组合数问题
    • 高斯整数学习笔记
  • 动态规划

  • 暴力

  • 图论

  • 数据结构

  • 字符串

  • 几何

  • 博弈论

  • 其他

模运算学习笔记

# 前言

只知其一,不知其二

# 例题 POJ 1845 (opens new window)

由于该题的p=9901p=9901p=9901,计算等比数列和时,除数可能为ppp的倍数,此时不可使用逆元计算。

# a/b%c=a%(b∗c)/ba/b \% c = a \% (b*c)/ba/b%c=a%(b∗c)/b

前提: a/ba/ba/b为整数

证明:

存在整数kkk使得

ab%c=ab−kc\frac{a}{b}\%c=\frac{a}{b}-kcba​%c=ba​−kc

因此

ab%c=a−kbcb\frac{a}{b}\%c=\frac{a-kbc}{b}ba​%c=ba−kbc​

注意上面的式子用的是等号而非同余

根据上述定理,可以使用以下代码求解本题

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

# 逆元

若ax≡1(modp)ax\equiv 1 \pmod{p}ax≡1(modp),且p,ap,ap,a互质,那么就定义xxx为aaa在模ppp意义下的逆元,记为a−1a^{-1}a−1

# 快速幂求逆元(费马小定理)

若p为素数, a为正整数, 且 a、pa 、 pa、p 互质。则有 ap−1≡1(modp)a^{p-1} \equiv 1\pmod pap−1≡1(modp)

因此,a−1≡ap−2(modp)a^{-1}\equiv a^{p-2} \pmod{p}a−1≡ap−2(modp)

# 线性求逆元

显然1≡1(modp)1\equiv 1 \pmod{p}1≡1(modp)

对于当前iii,设k,rk,rk,r使得p=k∗i+r,(1<r<i<p)p=k*i+r,(1\lt r \lt i \lt p)p=k∗i+r,(1<r<i<p),即k=⌊pi⌋,r=pmodik=\left\lfloor\frac{p}{i}\right\rfloor, r=p\mod{i}k=⌊ip​⌋,r=pmodi.

那么ki+r≡0(modp)ki+r\equiv 0\pmod{p}ki+r≡0(modp),两边同时乘上i−1r−1i^{-1}r^{-1}i−1r−1

得:kr−1+i−1≡0(modp)kr^{-1}+i^{-1}\equiv 0\pmod{p}kr−1+i−1≡0(modp)

即:i−1≡−kr−1≡−⌊pi⌋(pmodi)−1(modp)i^{-1}\equiv-kr^{-1}\equiv -\lfloor\frac{p}{i}\rfloor\ (p\mod i)^{-1}\pmod{p}i−1≡−kr−1≡−⌊ip​⌋(pmodi)−1(modp)

为避免负数,可改写为i−1≡(p−⌊pi⌋)(pmodi)−1(modp)i^{-1}\equiv (p-\lfloor\frac{p}{i}\rfloor)(p\mod i)^{-1}\pmod{p}i−1≡(p−⌊ip​⌋)(pmodi)−1(modp)

inv[1] = 1;
for(int i=2; i<=n; i++){
	inv[i] = (p - p / i)  * inv[p % i] % p;
}
1
2
3
4

# 欧拉降幂

ab={ab%φ(p)gcd(a,p)=1abgcd(a,p)≠1,b<φ(p)ab%φ(p)+φ(p)gcd(a,p)≠1,b≥φ(p)a^{b}=\left\{\begin{array}{ll}a^{b \% \varphi(p)} & g c d(a, p)=1 \\a^{b} & g c d(a, p) \neq 1, b<\varphi(p) \\a^{b \% \varphi(p)+\varphi(p)} & g c d(a, p) \neq 1, b \geq \varphi(p)\end{array}\right. ab=⎩⎪⎨⎪⎧​ab%φ(p)abab%φ(p)+φ(p)​gcd(a,p)=1gcd(a,p)=1,b<φ(p)gcd(a,p)=1,b≥φ(p)​

其中φ(x)\varphi(x)φ(x)为欧拉函数(小于或等于xxx的正整数中,与xxx互质的数的个数,当xxx为质数,φ(x)=x−1\varphi(x)=x-1φ(x)=x−1)

其中第一条为欧拉降幂,剩余两条为广义欧拉降幂

上次更新: 2021/02/24, 03:37:30
本原勾股数组学习笔记
欧拉函数

← 本原勾股数组学习笔记 欧拉函数→

最近更新
01
深入理解Java虚拟机
03-04
02
DNS工作原理
02-27
03
改用VuePress啦
02-23
更多文章>
Theme by Vdoing | Copyright © 2019-2021
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式