约数个数
@Ubospica 对于约数个数上界的估计
d(n)≤nlnlnnc,其中 c≈1.066。当 n>5000 约有 d(n)<n。
质数判定
关于质数判定的一些资料:
费马素性检验 / 费马测试
费马小定理的逆否命题:若存在 1≤a<p,使得 ap−1≡1(modp),则 p 一定不是素数。
多次选取质数 a∈[1,p),使用快速幂检查 pa−1modp 是否为 1:若存在快速幂的结果不是 1,则 p 一定不是素数;否则 p 大概率是素数。
遗憾的是,费马素性检验存在一个问题:有的合数 p 也满足 ap−1≡1(modp)(1≤a<p),这样的数被称为卡迈克尔数(Carmichael Number)/ 费马伪素数。例如,561=3×11×17 就是一个卡迈克尔数。在 109 以内,这样的数有 646 个,显然 264 以内不能通过打表来满足素性检测的要求。
Miller Rabin 素性检验
二次探测定理:若 p 为奇素数,则 x2≡1(modp) 的解为 x≡±1(modp)。
步骤:
- 选择一个质数 a,初始化指数 d=p−1。
- 快速幂判定 admodp 是否为 1;若是,重复 d←2d 直到 d 为奇数或 ad≡1(modp)。
错误率 4−k,其中 k 是选取的底数个数。时间复杂度 O(k2logp)。
关于确定性检验的底数选取:
- 对于 232 以内的判素,选取 2,7,61 三个底数即可。
- 对于 264 以内的判素,选取 2,325,9375,28178,450775,9780504,1795265022 七个底数即可。
- 如果是考场上,选取 2,3,5,7,11,13,17,19,23,29,31,37(也就是前十二个质数)作为底数即可,它适用于 278 以内的判素。
分解质因数
生日悖论
对于一个值域为 [1..n] 的随机整数生成器,生成 ln2n 个数期望得到两个数相同。
Pollard Rho [UNFINISHED]
早忘完了。
欧几里得算法相关 GCD
裴蜀定理 / 贝祖定理
对于任意的 a,b,x,y,有 gcd(a,b)∣ax+by。即:ax+by=c 有解,当且仅当 gcd(a,b)∣c。
推广:对于任意整数数列 {ai},{ki},有 gcd{ai}∣∑aiki。
扩展欧几里得算法 Ex GCD
用于求解二元一次不定方程 ax+by=c,等价于 ax≡c(modb)。由裴蜀定理得当且仅当 gcd(a,b)∣c 时有解。
gcd(a,b)=gcd(b,amodb)。bx0+(amodb)y0=k×gcd(b,amodb)=k×gcd(a,b)=ax+by,尝试把左边构造成右边的形式。bx0+ay0−⌊ba⌋×by0=ay0+b(x0−⌊ba⌋×y0),所以{x=y0y=x0−⌊ba⌋×y0。
类欧几里得算法
用于计算:
f(a,b,c,n)g(a,b,c,n)h(a,b,c,n)=i=0∑n⌊cai+b⌋=i=0∑ni⌊cai+b⌋=i=0∑n⌊cai+b⌋2
该算法多用于解决直线下整点等相关问题。
计算 1 式:f(a,b,c,n)=∑i=0n⌊cai+b⌋
若 a=0,则 f(a,b,c,n)=(n+1)⌊cb⌋。
若 a≥c∨b≥c,则:
f(a,b,c,n)=i=0∑n⌊ci(amodc)+(bmodc)⌋+i⌊ca⌋+⌊cb⌋=f(amodc,bmodc,c,n)+2n(n+1)⌊ca⌋+(n+1)⌊cb⌋
否则 a<c∧b<c,则:
f(a,b,c,n)=i=0∑nj=0∑⌊cai+b⌋−11=j=0∑M−1i=0∑n[j<⌊cax+b⌋]=j=0∑M−1i=0∑n[i>t]=nM−j=0∑M−1t=nM−f(c,c−b−1,a,M−1)
上式中 M=⌊can+b⌋,t=⌊acj+c−b−1⌋。
计算 2 式:g(a,b,c,n)=∑i=0ni⌊cai+b⌋
若 a=0,则 g(a,b,c,n)=2n(n+1)⌊cb⌋。
若 a≥c∨b≥c,则:
g(a,b,c,n)=i=0∑ni⌊ci(amodc)+(bmodc)⌋+i2⌊ca⌋+i⌊cb⌋=g(amodc,bmodc,c,n)+6n(n+1)(2n+1)⌊ca⌋+2n(n+1)⌊cb⌋
否则 a<c∧b<c,则:
g(a,b,c,n)=i=0∑nj=0∑⌊cai+b⌋−1i=j=0∑M−1i=0∑n[j<⌊cax+b⌋]i=j=0∑M−1i=0∑n[i>t]i=2n(n+1)M−j=0∑M−12t(t+1)=21(n(n+1)M−h(c,c−b−1,a,M−1)−f(c,c−b−1,a,M−1))
上式中 M=⌊can+b⌋,t=⌊acj+c−b−1⌋。
计算 3 式:h(a,b,c,n)=∑i=0n⌊cai+b⌋2
若 a=0,则 h(a,b,c,n)=(n+1)⌊cb⌋2。
若 a≥c∨b≥c,则:
h(a,b,c,n)= h(amodc,bmodc,c,n)+2⋅f(amodc,bmodc,c,n)⌊cb⌋+2⋅g(amodc,bmodc,c,n)⌊ca⌋+6n(n+1)(2n+1)⌊ca⌋2+(n+1)⌊cb⌋2+n(n+1)⌊ca⌋⌊cb⌋
否则 a<c∧b<c。因为 p2=2⋅2p(p+1)−p=(2∑i=1pi)−p,所以:
h(a,b,c,n)=i=0∑n⎝⎜⎜⎛2j=1∑⌊cai+b⌋j−⌊cai+b⌋⎠⎟⎟⎞=−f(a,b,c,n)+2i=0∑nj=1∑⌊cai+b⌋j=−f(a,b,c,n)+2j=0∑M−1(j+1)i=0∑n[j<⌊cai+b⌋]=−f(a,b,c,n)+2j=0∑M−1(j+1)i=0∑n[i>t]=−f(a,b,c,n)+2j=0∑M−1(j+1)(n−t)=−f(a,b,c,n)+nM(M+1)−2g(c,c−b−1,a,M−1)−2f(c,c−b−1,a,M−1)
上式中 M=⌊can+b⌋,t=⌊acj+c−b−1⌋。
同余相关
欧拉函数 Euler
- 唯一分解 n=i=1∏kpiai,有 φ(n)=ni=1∏k(1−pi1)。
- 质数 p 满足 φ(p)=p−1,φ(pn)=pn−1(p−1)。
- 当 a,b 互质时有 φ(ab)=φ(a)φ(b)。
- 若 a∣p,则有 φ(ap)=a⋅φ(p)。
费马小定理 Fermat
若 p 是质数且 a,p 互质,则 ap−1≡1(modp)。等价于 ap≡a(modp)。
应用:求模质数意义下的乘法逆元;简化模意义下乘方运算的指数,即 ab≡abmod(p−1)(modp)。
欧拉定理 Euler
若 a,p 互质,则有 aφ(p)≡1(modp)。当 p 为质数时 φ(p)=p−1,同费马小定理。故欧拉定理是费马小定理的扩展。
扩展欧拉定理 Ex Euler
若 b≥φ(p) ,则 ab≡abmodφ(p)+φ(p)(modp),其中 a,p 可以不互质。
卢卡斯定理 Lucas
Cnm≡C⌊n/p⌋⌊m/p⌋×Cnmodpmmodp(modp),要求 p 是质数。
扩展卢卡斯定理 Ex Lucas [UNFINISHED]
(n−m)!m!n!modab←n!modab。
9!mod22n!modpc=(2×4×6×8)×(1×3)×(5×7)×9mod22=24×4!×(1×3)2×9mod22=p⌊n/p⌋×⌊n/p⌋!×(i=1∧in∏)⌊n/pc⌋
线性求乘法逆元
依据:
- i=1∏nai−1≡(i=1∏nai)−1(modp) ,即积的逆元同余逆元的积。
- i=1∏nai−1×an≡i=1∏n−1ai−1(modp)。
中国剩余定理 CRT
若数列 {mi} 互质,则线性同余方程组
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x≡a1modm1x≡a2modm2…x≡anmodmn
有整数解;且在模 M=i=1∏nmi 意义下有唯一整数解,为 i=1∑nai⋅invi⋅miM。其中 invi=(miM)−1(modmi)(mi 不保证为质数就用 Ex GCD 求)。
阶
定义:由欧拉定理「若 a⊥p 则 aφ(p)≡1(modp)」,记 a 模 p 意义下的阶 δp(a) 为最小的正整数 n,满足 an≡1(modp)。
性质:
- a,a2,⋯,aδp(a) 模 p 两两不同余。
- 所有 δp(a) 的倍数 n,均满足 an≡1(modp)。
- 更进一步地,an≡am(modp) 与 n≡m(modδp(a)) 等价。
- 若 a⊥p 且 b⊥p,则 δp(ab)=δp(a)δp(b) 等价于 δp(a)⊥δp(b)。
原根
定义:若 a⊥p 且 δp(a)=φ(p),则称 a 为 p 的原根。
判定定理:若 a⊥p 且 p≥3,则 a 是 p 的原根的充要条件是,对于所有素数 k∣φ(p),都有 akφ(p)≡1(modp)。
存在定理:p 有原根,当且仅当 p=2,4,kx,k2x,其中 k 为奇素数,x 为正整数。
个数定理:若 p 有原根,那么它的原根个数为 φ(φ(p))。
离散对数
定义:若 p 有原根 g,且 gk≡a(modp),那么 k≡Indga(modφ(p))。
性质:
- Indgab≡Indga+Indgb(modφ(p))。
- Indgab≡b Indga(modφ(p))。
大步小步算法 BSGS
求解 ax≡b(modp),使得 0≤x<p。其中 a⊥p。
设 x=A⌊p⌋−B,移项,有 xAp≡baB(modp)。
像折半一样搜,O(p) 或 O(plogp)。
扩展大步小步算法 Ex BSGS [UNFINISHED]
早忘完了。
莫比乌斯反演 Mobius
数论函数
f(n) 满足 n∈N,f(n)∈Z。
e.g. Ik(n)=nk,d(n)=∑p∣n1,σ(n)=∑p∣np。
积性函数
∀a⊥b,f(a)f(b)=f(ab)。
完全积性函数:∀a,b,f(a)f(b)=f(ab)。
数论分块 / 整除分块
⌊dn⌋ 只有 O(n) 种取值。
莫比乌斯函数
若唯一分解 n=i=1∏kpici,则 μ(n)=⎩⎪⎪⎨⎪⎪⎧1,0,(−1)k,n=1∃i,ci>1∀i,ci=1。
性质:
- ∑d∣nμ(d)=[n=1]。
唯一分解 n=∏pici,那么等式左边相当于 ∑pi(−1)∑pi。若 n=1,则 =0。
- 莫比乌斯反演:若 ∀n,f(n)=∑d∣ng(d),则 g(n)=∑d∣nμ(d)f(dn)。
狄利克雷卷积 Dirichlet
狄利克雷卷积是建立在群 (G,∗) 上的运算,其中 G 是数论函数集合,定义如:
(f∗g)(n)=d∣n∑f(d)g(dn)
狄利克雷卷积的单位元函数 ϵ(n)=[n=1]。
运算律:
- 交换律:f∗g=g∗f
- 结合律:f∗(g∗h)=(f∗g)∗h
- 分配律:f∗(g+h)=f∗g+f∗h
性质:
- 莫比乌斯函数 性质 1:μ∗I0=ϵ
- 莫比乌斯反演:若 f=g∗I0,则 g=μ∗f
- μ∗I1=φ
- φ∗I0=I1
筛法
杜教筛
求 S(n)=∑i=1nf(i),其中 f 是积性函数。下面 g 也是积性函数。
i=1∑n(f∗g)(i)=d=1∑ng(d)S(⌊dn⌋)
∗ 是狄利克雷卷积,这是莫反基本操作。
g(1)S(n)=d=1∑ng(d)S(⌊dn⌋)−d=2∑ng(d)S(⌊dn⌋)=i=1∑n(f∗g)(i)−d=2∑ng(d)S(⌊dn⌋)
只要我们能快速求出 ∑i=1n(f∗g)(i) 和 g 的前缀和,就可以整除分块了。
不预处理是 O(n43),线性筛预处理前 O(n32) 项优化成 O(n32)。
洲阁筛
求 S(n)=∑i=1nf(i),其中 f 是积性函数。用于解决杜教筛求不了的函数。
我们把 S(n) 分成两部分,第一部分是 i 有 >n 的质因子的,第二部分是剩下的。
第一部分
DP。设 g(x,y) 表示 1∼y 中与前 x 个质数互质的 i 的 f(i) 之和,有:
g(x,y)=g(x−1,y)+f(px)⋅g(x−1,⌊pxy⌋)
可惜复杂度是 O(lnnn⋅n)=O(lognn) 的。
注意到当 px>y 时,g(x,y)=g(x−1,y)−f(px)。
所以一旦发现 px2>y 则停止转移,记此时的 x 为 t(y),那么 ∀x>t(y),g(x,y)=g(x−1,y)−∑i=t(y)x−1f(pi)。答案就是 ∑i=1nf(i)⋅g(m,⌊in⌋)。
第二部分 [UNFINISHED]