zory.ink–‡章/数论debug.pdf最大公约数, 最小公倍数 lcm(s) =∏ tˆs gcd(t)(j1)...
TRANSCRIPT
最大公约数, 最小公倍数
lcm(S) =∏T⊂S
gcd(T )(−1)|T |+1
gcd(Fib(a),Fib(b)) = Fib(gcd(a, b))
gcd(xa − 1, xb − 1) = xgcd(a,b) − 1
__debug untitled 2/932/93
BZOJ 4833
已知f(n) = 2f(n− 1) + f(n− 2)
f(0) = 0, f(1) = 1
g(n) = lcm(f(1), f(2), ..., f(n))
求n∑
i=1
g(i)× i (mod p)
n ≤ 106, p 为质数
__debug untitled 3/933/93
gcd(f(i), f(j)) = f(gcd(i, j))
g(n) =∏
T⊂2[n]
f(gcdi∈T
(i))(−1)|T |+1
f(n) =∏d|n
h(d)
g(n) =∏
T⊂2[n]
∏d| gcdi∈T (i)
h(d)
(−1)|T |+1
=
n∏d=1
h(d)∑
T⊂2[⌊n/d⌋] (−1)|T |+1
=
n∏d=1
h(d)
__debug untitled 4/934/93
HDU 5780
求 ∑1≤a,b≤n
gcd(xa − 1, xb − 1)
x, n ≤ 100000, 300 组数据
__debug untitled 5/935/93
ans =∑
1≤a,b≤n
(xgcd(a,b) − 1)
=
n∑k=1
(xk − 1)∑
1≤a,b≤n
[gcd(a, b) = k]
=
n∑k=1
(xk − 1)
2
⌊n/k⌋∑i=1
φ(i)− 1
整除分块.
__debug untitled 6/936/93
费马小定理, 欧拉定理, 扩展欧拉定理
若 p 是一个质数, 且 a 不是 p 的倍数
ap−1 ≡ 1 (mod p)
若 a, p 互质aφ(p) ≡ 1 (mod p)
一般情况
am ≡ amin{m,(m mod φ(n))+φ(n)} (mod p)
__debug untitled 7/937/93
中国剩余定理
求一元模线性方程组 x ≡ ai (mod pi) 的一个通解, pi 两两互质.
设
P =∏
pi
Pi =P
pi
ti = P−1i mod pi
构造通解x ≡
∑aitiPi (mod P )
__debug untitled 10/9310/93
BZOJ 1129
给一个序列 s (可能有重复元素), 求 s 的字典序排名, 对 m 取模.
n ≤ 3× 105, m 不一定为质数
__debug untitled 11/9311/93
对每一位考虑贡献, 例如第 1 位的贡献就是
(n− 1)!∏i cnt(i)!
(∑i<s1
cnt(i)
)
可以用 BIT 维护后面的(∑
i<s1cnt(i)
).
由于 m 不是质数, 首先 CRT, 转化为模 pk, 其中 p 为质数.此时可以用一个数对 (x, y) 将每个数表示为 xpy, 其中 y 极大.
__debug untitled 12/9312/93
uria
求有多少组正整数对 (a, b) 满足1. a+ b ≤ n
2. a+ b | ab
n ≤ 1014
__debug untitled 14/9314/93
令 d = gcd(a, b), 不妨设 a = a′d, b = b′d, 则 a′ + b′ | d.又因为 (a′ + b′)d ≤ n, 所以 a′ + b′ ≤
√n.
不妨枚举 t = a′ + b′, 则其对答案的贡献为 ⌊ nt2⌋φ(t).
__debug untitled 15/9315/93
积性函数
令 n = pe11 pe22 · · · pekk ,• ϵ(n) = [n = 1]
• 1(n) = 1
• Id(n) = n
• µ(n) = [max(e1, e2, . . . , ek) ≤ 1](−1)k
• φ(n) = n∏
d|n(1−1d)
• d(n) =∑
d|n 1
• σ(n) =∑
d|n d
• λ(n) = (−1)k
• ...
__debug untitled 16/9316/93
狄利克雷卷积
(f ∗ g)(n) =∑d|n
f(d)g(n
d)
• µ ∗ 1 = ϵ (莫比乌斯反演)• Id = φ ∗ 1 =⇒ φ = µ ∗ Id• d = 1 ∗ 1 =⇒ 1 = µ ∗ d• σ = Id ∗ 1 =⇒ Id = µ ∗ σ• σ = φ ∗ d• d(ij) =
∑p|i∑
q|j [gcd(p, q) = 1]
• σ(ij) =∑
p|i∑
q|j [gcd(p, q) = 1] ipq
•∑n
i=1 µ2(i) =
∑i≥1 µ(i)⌊
ni2⌋
__debug untitled 17/9317/93
div
求n∑
i=1
∑d|i
f(i
d)σ(d)
其中f(n) =
∑i2+j2=n
gcd(i,j)=1
i
n ≤ 1010
__debug untitled 19/9319/93
杜教筛的思想: f ∗ g 的前缀和可以转化为两个前缀和, 于是如果f, g 的前缀和都容易求出, 那么最终的结果也容易求出:
n∑i=1
∑d|i
f(i
d)σ(d)
=
n∑k=1
f(k)∑k|i
σ(i
k)
=
n∑k=1
f(k)D(⌊nk⌋)
于是问题变为求 σ 的前缀和 D, 和 f 的前缀和 F . D 很好求:
D(n) =∑i≥1
i⌊ni⌋
整除分块即可.
__debug untitled 20/9320/93
F 没那么好求. 设 G(n) =∑
1≤i2+j2≤n i, 则
G(n) =∑i≥1
i⌊√n− i2⌋
G(n) =∑i≥1
F (n
d2)d
F (n) = G(n)−∑i>1
F (n
d2)d
预处理前 n2/3 项, 时间复杂度 O(n2/3).
__debug untitled 21/9321/93
ra
求有多少组正整数对 (a, b) 满足1. a, b ≤ n
2. lcm(a, b) > n
n ≤ 1010
__debug untitled 22/9322/93
首先补集转化, 即求∑1≤t≤n
∑1≤i,j≤n
[gcd(i, j) = t][ij ≤ nt]
=∑
1≤t≤n
∑1≤i,j≤⌊n/t⌋
[gcd(i, j) = 1][ij ≤ ⌊n/t⌋]
__debug untitled 23/9323/93
由于 t 可以整除分块, 不妨设
f(k) =∑
1≤i,j≤k
[gcd(i, j) = 1][ij ≤ k]
不妨设 i < j, 然后 1 到√k 枚举 i: (注意 i = j = 1 的情况)
f(k) = 2
√k∑
i=1
−φ(i) +
⌊k/i⌋∑j=1
[gcd(i, j) = 1]
+ 1
= 2
√k∑
i=1
−φ(i) +∑d|i
µ(d)
⌊k
id
⌋+ 1
考虑每个 d 的贡献就可以 O(√k log k) 计算 f(k) 了.
时间复杂度 O(n3/4 logn).
__debug untitled 24/9324/93
性质 1:f(k)− f(k − 1) = 2c(k)
其中 c(k) 为 k 的质因子个数.
证明:考虑在 f(k) 中有的 (i, j) 而在 f(k − 1) 中没有的, 一定满足 ij = k且 gcd(i, j) = 1. 容易看出这样的 (i, j) 的对数就是 2c(k).
c(x) 是一个积性函数, 可以线性筛. 借鉴杜教筛的思想, 预处理前n2/3 项即可, 时间复杂度 O(n2/3 logn).
__debug untitled 25/9325/93
性质 2:
f(k) =k∑
i=1
⌊k
i
⌋−
√k∑
t=2
f
(k
t2
)证明:• 将所有 ij ≤ k 的考虑进来:
∑ki=1⌊k/i⌋
• 再枚举 t = gcd(i, j), 减去贡献:∑√
kt=2 f(k/t
2)
借鉴杜教筛的思想, 递归计算即可, 时间复杂度 O(n2/3).
__debug untitled 26/9326/93
定义
在 n 个元素中取出 k 个的方案数:(n
k
)=
(n− 1
k
)+
(n− 1
k − 1
)=
nk
k!
将 n 个元素分为 k 个环的方案数:[n
k
]= (n− 1)
[n− 1
k
]+
[n− 1
k − 1
]将 n 个元素分为 k 个集合的方案数:{
n
k
}= k
{n− 1
k
}+
{n− 1
k − 1
}
__debug untitled 27/9327/93
(n
k
)=
n
k
(n− 1
k − 1
)(n
k
)=
n− k + 1
k
(n
k − 1
)(n
k
)=
k∑j=0
(n− k − 1 + j
j
)(n
k
)=
n−1∑j=0
(j
k − 1
)(n
k
)≡(⌊n/p⌋⌊k/p⌋
)(n mod p
k mod p
)(mod p)
__debug untitled 28/9328/93
AGC018 E
已知平面上三块不相交的从左上到右下排列的三块矩形区域A,B,C, 求分别从这三个区域中挑一个点构成的路径的个数, 只能向右或向上走.
坐标范围 ≤ 106
__debug untitled 29/9329/93
an =
n∑i=0
(n
i
)bi =⇒ bn =
n∑i=0
(−1)n−i
(n
i
)ai
ak =
n∑i=k
(i
k
)bi =⇒ bk =
n∑i=k
(−1)i−k
(i
k
)ai
__debug untitled 31/9331/93
xn =
n∑k=0
{n
k
}xk =
n∑k=0
(−1)n−k
{n
k
}xk
xn =
n∑k=0
(−1)n−k
[n
k
]xk
xn =
n∑k=0
[n
k
]xk
{n
j
}=
1
j!
j∑k=0
(−1)j−k
(j
k
)kn
__debug untitled 32/9332/93
BZOJ 2159
给定一棵 n 个点的树和一个常数 k, 对于每个 i, 求
S(i) =
n∑j=1
dist(i, j)k
n ≤ 50000, k ≤ 150
__debug untitled 33/9333/93
S(i) =
n∑j=1
k∑l=0
{k
l
}dist(i, j)l
=
k∑l=0
{k
l
} n∑j=1
dist(i, j)l
=
k∑l=0
{k
l
}l!
n∑j=1
(dist(i, j)
l
)
利用组合数的递推式, 可以 O(k) 将 dist(i, j) 加 1. 然后就可以 DP了. 时间复杂度 O(nk).
__debug untitled 34/9334/93
BZOJ 4555
求n∑
i=0
i∑j=0
{i
j
}2jj! (mod 998244353)
n ≤ 105
__debug untitled 35/9335/93
直接斯特林反演
i∑j=0
2jj!
j∑k=0
(−1)j−k
(j − k)!
∑ni=0 k
i
k!
FFT 即可.
__debug untitled 36/9336/93
原题的价值
定义一个无向图的权值为所有节点的度数的 k 次方之和. 求所有 n个点的简单无向图的权值之和, 对 998244353 取模.
n ≤ 109, k ≤ 105
__debug untitled 37/9337/93
考虑每个点的贡献, 发现答案就是(n−1∑i=0
(n− 1
i
)ik
)2
(n−1)(n−2)2 n
转化为求n∑
i=0
(n
i
)ik
__debug untitled 38/9338/93
n∑i=0
(n
i
)ik =
n∑i=0
(n
i
) k∑j=0
{k
j
}ij
=
n∑i=0
(n
i
) k∑j=0
{k
j
}(i
j
)j!
=
k∑j=0
{k
j
}j!
n∑i=0
(n
i
)(i
j
)
=
k∑j=0
{k
j
}j!
(n
j
) n∑i=0
(n− j
i
)
=
k∑j=0
{k
j
}nj2n−j
利用斯特林反演, FFT 快速求第二类斯特林数即可.
__debug untitled 39/9339/93
LOJ 2327
两个人玩一个有限状态非对称组合游戏.给出 m 个棋盘, 求所有 2m 个子集的胜负结果.
__debug untitled 40/9340/93
拉格朗日插值
给定 n+ 1 个点 (x0, y0), (x1, y1), ..., (xn, yn), 求一个 n 次函数穿过这些点.
ℓk(x) =
n∏j=0,j ̸=k
x− xjxk − xj
L(x) =
n∑k=0
ykℓk(x)
__debug untitled 42/9342/93
差分表
给定 n+ 1 个点 (0, y0), (1, y1), ..., (n, yn), 求一个 n 次函数穿过这些点.
∆0f(j) = f(j)
∆kf(j) = ∆k−1f(j + 1)−∆k−1f(j)
可以证明
f(x) =
n∑k=0
(x
k
)∆kf(0)
∆0f(0),∆1f(0), ...,∆nf(0) 被称作差分表的第一条对角线.
__debug untitled 43/9343/93
例如 f(x) = 2x3 + 2x2 − 4x+ 1 的差分表为
1, 1, 16, 60, 144, 513, ...
0, 16, 44, 84, 136, ...
16, 28, 40, 52, ...
12, 12, 12, ...
0, 0, ...
__debug untitled 44/9344/93
例如 f(x) = 2x3 + 2x2 − 4x+ 1 的差分表为
1, 1, 16, 60
0, 16, 44
16, 28
12
第一条对角线为1, 0, 16, 12
__debug untitled 45/9345/93
自然数幂和
给定 n, m, 求∑m
k=0 kn, 对质数 p 取模.
n ≤ 1000,m ≤ 109
__debug untitled 46/9346/93
考虑 f(x) = xn 这一函数的差分表的第 0 条对角线 c0...cn.
m∑k=0
f(k) =
m∑k=0
n∑j=0
cj
(k
j
)
=
n∑j=0
m∑k=0
cj
(k
j
)
=
n∑j=0
cj
(m+ 1
j + 1
)
由于模数为质数, 可以 O(n2) 计算.
__debug untitled 47/9347/93
由之前的做法可知∑m
k=0 kn 是一个关于 m 的 n+ 1 次多项式. 直
接拉格朗日插值即可.取 k = 0...n+ 1 时的函数值, 此时拉格朗日插值可优化为 O(n). 要算出这些函数值, 线性筛一下也是 O(n) 的.
__debug untitled 48/9348/93
study
给定 k, a, n, d, 求
n∑i=0
a+id∑j=1
j∑l=1
lk mod 1234567891
k ≤ 3000, a, n, d < 1234567891
__debug untitled 49/9349/93
首先注意到∑j
l=1 lk 是一个关于 j 的 k + 1 次多项式.
然后注意到∑a+id
j=1
∑jl=1 l
k 是一个关于 i 的 k + 2 次多项式.所以答案就是一个关于 n 的 k + 3 次多项式.
先把∑j
l=1 lk 的差分表第一条对角线求出来, 然后 O(k2) 求出∑a+id
j=1
∑jl=1 l
k 在 i = 0, 1, ..., k + 2 时的值. 最后再把∑a+idj=1
∑jl=1 l
k 的第一条对角线求出来, 直接算就可以了.
__debug untitled 50/9350/93
极限
Let f(x) be defined on an open interval about c, except possibly at citself. We say that the limit of f(x) as x approaches c is the numberL, and write
limx→c
f(x) = L
if, for every number ϵ > 0, there exists a corresponding number δ > 0such that for all x,
0 < |x− c| < δ =⇒ |f(x)− L| < ϵ
__debug untitled 52/9352/93
连续
limx→c
f(x) = f(c)
limx→c+
f(x) = f(c)
limx→c−
f(x) = f(c)
__debug untitled 53/9353/93
导数
f′(x) = lim
h→0
f(x+ h)− f(x)
h
= limz→x
f(z)− f(x)
z − x
例子: 求 (√x)
′ .
__debug untitled 54/9354/93
(√x)
′= lim
z→x
√z −
√x
z − x
= limz→x
√z −
√x
(√z −
√x)(
√z +
√x)
= limz→x
1√z +
√x
=1
2√x
__debug untitled 55/9355/93
记号
f′(x) = y
′=
dy
dx=
d
dxf(x)
f′′(x) = y
′′=
d2y
dx2=
d
dx
(dy
dx
)解释:
dy = f′(x)dx
__debug untitled 56/9356/93
运算法则
d
dx(u± v) =
du
dx± dv
dxd
dx(cu) = c
du
dxd
dx(uv) = v
du
dx+ u
dv
dx
d
dx(u
v) =
v dudx − u dv
dx
v2
dy
dx=
dy
du
du
dx
__debug untitled 57/9357/93
三角函数求导
d
dx(sinx) = cosx
d
dx(cosx) = − sinx
d
dx(tanx) = − 1
cos2 x = − sec2 xd
dx(secx) = secx tanx
提示:limθ→0
sin θ
θ= 1
__debug untitled 59/9359/93
反三角函数求导
d
dx(arcsinx) =
1
cos(sin−1 x)
=1√
1− sin2(arcsinx)
=1√
1− x2
d
dx(arccosx) = − 1√
1− x2
d
dx(arctanx) =
1
1 + x2
__debug untitled 62/9362/93
xn 求导
当 x > 0 时,xn = en lnx
d
dx(xn) =
d
dxen lnx
= en lnx d
dx(n lnx)
= xnn
x= nxn−1
__debug untitled 63/9363/93
洛必达法则
当 f(a), g(a) 都为 0 或 ∞ 时, 有
limx→a
f(x)
g(x)= lim
x→a
f′(x)
g′(x)
例子: 证明lim
x→0+(1 + x)1/x = e
__debug untitled 64/9364/93
令 f(x) = (1 + x)1/x, 因为
ln f(x) =1
xln(1 + x)
所以
limx→0+
ln f(x) = limx→0+
ln(1 + x)
x= 1
于是lim
x→0+(1 + x)1/x = lim
x→0+eln f(x) = e
__debug untitled 65/9365/93
反导数
F 是 f 的反导数当且仅当 F′(x) = f(x).
定理: 如果 F 是 f 的一个反导数, 那么所有 f 的反导数形如
F (x) + C
__debug untitled 67/9367/93
定积分
∫ b
af(x) dx = lim
n→∞
n∑k=1
f
(a+ k
b− a
n
)(b− a
n
)
__debug untitled 68/9368/93
微积分基本定理
F′(x) =
d
dx
∫ x
af(t)dt = f(x)∫ b
af(x) dx = F (b)− F (a)
__debug untitled 69/9369/93
令 u = 2x+ 1, 则
du
dx= 2
dx =du
2
于是 ∫ √2x+ 1 dx =
∫ √u dx
=
∫ √udu
2
=1
2
∫ √u du
=u3/2
3+ C
=1
3(2x+ 1)3/2 + C
__debug untitled 72/9372/93
令 u = cosx, 则 ∫tanx dx =
∫ sinx
cosxdx
=
∫−1
udu
= − ln |u|+ C
= − ln | cosx|+ C
= ln | secx|+ C
__debug untitled 74/9374/93
令 u = x, dv = cosx dx, 则 du = dx, v = sinx, 有∫x cosx dx = x sinx−
∫sinx dx
= x sinx+ cosx+ C
__debug untitled 76/9376/93
令 u = lnx, dv = dx, 则 du = 1x , v = x, 有∫
lnx dx = x lnx−∫
x1
xdx
= x lnx− x+ C
__debug untitled 78/9378/93
例子: 分析复杂度
√n∑
i=1
√i+
√n
i
logn
(为了方便, 把 log 提出来了, 反正是上界)求导近似∫ √
x+
√n
xdx =
∫ √x dx+
∫ √n
xdx =
2x32
3+ 2
√nx
带进去就是 8n3/4
3 . 时间复杂度 O(n3/4 logn).
__debug untitled 80/9380/93
如果预处理前 k, (k >√n) 项, 那么复杂度渐进上界为
k +
⌊n/k⌋∑i=1
√⌊ni
⌋ logn
求导近似 ∫ √n
xdx = 2
√nx
带入
k +2n√k
logn
不管 log 和常数, 当 k = n2/3 时有最小值.时间复杂度 O(n2/3 logn).
__debug untitled 81/9381/93
kara
给你一个 n 维超立方体,第 i 个维度的长度为 ri ,同时给你一个n 维超平面 x1 + x2 + ...+ xn = S. 这个超平面把超立方体切成至多两部分, 求原点所在的那一部分的面积.
__debug untitled 82/9382/93
设 An(x) 为在 n 维空间里 S = x, 且长度没有限制的面积.发现 An(x) 是 An−1(x0) 在 [0, x] 上的定积分, 显然
An(x) =xn
n!
接下来考虑坐标的限制, 即∑
xi ≤ S, 其中每个 xi ∈ [0, ri] 。考虑容斥. 我们把没有限制的情况分别减去第 1, 2, ..., n 个元素超过限制的情况, 再加上第 1, 2, 第 1, 3 等元素同时超过限制的情况......注意到 N × maxAi 不会很大, 容斥可以用 DP 优化.
__debug untitled 83/9383/93
构造 v(x) 满足
vdy
dx+ Pvy =
d
dx(vy)
则
dy
dx+ P (x)y = Q(x)
v(x)dy
dx+ P (x)v(x)y = v(x)Q(x)
d
dx(v(x)y) = v(x)Q(x)
v(x)y =
∫v(x)Q(x) dx
y =1
v(x)
∫v(x)Q(x) dx
__debug untitled 85/9385/93
回来构造 v(x):
vdy
dx+ Pvy =
d
dx(vy)
vdy
dx+ Pvy = v
dy
dx+ y
dv
dx
Pvy = ydv
dxdv
dx= Pv
dv
v= Pdx∫
dv
v=
∫P dx
ln v =
∫P dx
v = e∫P dx
__debug untitled 86/9386/93
辛普森积分
∫ b
af(x) dx ≈ b− a
6
(f(a) + 4f
(a+ b
2
)+ f(b)
)常用自适应辛普森.
__debug untitled 87/9387/93
拉格朗日乘数
找到 f(x1, x2, ..., xn) 的极值点, 满足 g(x1, x2, ..., xn) = 0.
∇f = λ∇g
__debug untitled 90/9390/93