知识点 - 数论进阶
abstract:整除分块,积性函数,线性筛,莫比乌斯反演,迪利克雷卷积,积性函数前缀和,杜教筛,阁洲筛,min_25筛
0.引入
(之后会发现,这道dp的转移方程和杜教筛的转移如出一辙。)
题意
有一份包含1个 bug 的n( 1≤?≤1e6)行代码,运行一次到崩溃需要的时间为 r( 1≤?≤1e9)。
你可以任意行添加 printf 语句来输出调试,即你知道是否在执行 printf 语句前就崩溃了。每设置一个 printf 语句需要花费 p( 1≤?≤1e9)时间,但是运行不额外消耗。
• 问在最坏情况下,少需要多时间可以定位
分析
设f(n) 表示 n行代码 debug 需要的最少时间 。
最优策略是平均地往n行代码添加x行输出代码,分成 ⌈ n x + 1 ⌉ \lceil \frac{n}{x+1}\rceil ⌈x+1n⌉块代码,然后再对出错的上一块代码递归debug.
得到对应的转移:
f
(
1
)
=
0
;
f
(
n
)
=
m
i
n
1
≤
i
<
n
(
f
(
⌈
n
i
+
1
⌉
)
+
i
p
+
r
)
f(1)=0;\\ f(n)=min_{1\le i<n}(f(\lceil \frac{n}{i+1}\rceil)+ip+r)
f(1)=0;f(n)=min1≤i<n(f(⌈i+1n⌉)+ip+r)
这个
O
(
n
2
)
O(n^2)
O(n2)的转移可以利用整除分块优化。
复杂度
递归过程中会出现
⌈
⌈
n
i
⌉
j
⌉
\lceil \frac{\lceil \frac{n}{i}\rceil}{j}\rceil
⌈j⌈in⌉⌉的式子,但我们有
⌈
⌈
n
i
⌉
j
⌉
=
⌈
n
i
j
⌉
\lceil \frac{\lceil \frac{n}{i}\rceil}{j}\rceil=\lceil \frac{n}{i j}\rceil
⌈j⌈in⌉⌉=⌈ijn⌉
所以递归中所有的取值都是
⌈
n
i
⌉
\lceil \frac{n}{i}\rceil
⌈in⌉的形式,而
⌈
n
i
⌉
\lceil \frac{n}{i}\rceil
⌈in⌉的取值只有
n
\sqrt n
n种,所以我们枚举
n
\sqrt n
n并记忆化搜索。时间复杂度为:
T
(
n
)
=
O
(
n
)
+
∑
i
=
1
n
T
(
i
)
+
T
(
n
i
)
T
(
n
)
=
∑
i
=
1
n
O
(
i
)
+
O
(
n
i
)
=
O
(
n
3
4
)
T(n)=O(\sqrt{n})+\sum_{i=1}^{\sqrt{n}}{T(i)+T(\frac{n}{i})}\\ T(n)=\sum_{i=1}^{\sqrt{n}}{O(\sqrt{i})+O(\sqrt{\frac{n}{i}})}=O(n^\frac{3}{4})
T(n)=O(n)+i=1∑nT(i)+T(in)T(n)=i=1∑nO(i)+O(in)=O(n43)
这里只展开一层就可以了,更深层的复杂度是高阶小量
小结
递归式形如
f
(
n
)
=
m
i
n
1
≤
i
<
n
(
f
(
⌈
n
i
+
1
⌉
)
+
i
p
+
r
)
f(n)=min_{1\le i<n}(f(\lceil \frac{n}{i+1}\rceil)+ip+r)
f(n)=min1≤i<n(f(⌈i+1n⌉)+ip+r)
可以利用整除分块做到
O
(
n
3
4
)
O(n^\frac{3}{4})
O(n43)。
这种形式的递归会在后面求积性函数前缀和时出现。
1.phi & mu:积性函数
定义
积性函数:若m1,m2互质
f
(
m
1
m
2
)
=
f
(
m
1
)
f
(
m
2
)
f(m1m2)=f(m1)f(m2)
f(m1m2)=f(m1)f(m2)
性质
-
积性函数只由其在质数幂处的取值决定。(这是积性函数可以线性筛的原因,线性筛素数模板如下)
for (int i = 2; i <= n; i++) { if (!vis[i]) prime[cnt++] = i; for (int j = 0;; j++) { int x = i * prime[j]; if (x>n) break; vis[x] = true; if (i%prime[j] == 0) break; } }
-
定义约数函数和sum-over-divisors function (迪利克雷卷积的原型)
g ( n ) = ∑ d ∣ n f ( d ) g(n)=\sum_{d|n}f(d) g(n)=d∣n∑f(d)
若f是积性函数,则g是积性函数 -
phi可以这么定义
ϕ ( d ) : ∑ d ∣ n ϕ ( d ) = n \phi(d):\sum_{d|n}\phi(d)=n ϕ(d):d∣n∑ϕ(d)=n
反过来可以用最简分数统计个数证明,即
0 12 , 1 12 , 2 12 , 3 12 , 4 12 , 5 12 , 6 12 , 7 12 , 8 12 , 9 12 , 10 12 , 11 12 0 1 ; 1 2 ; 1 3 , 2 3 ; 1 4 , 3 4 ; 1 6 , 5 6 ; 1 12 , 5 12 , 7 12 , 11 12 ϕ ( 1 ) + ϕ ( 2 ) + ϕ ( 3 ) + ϕ ( 4 ) + ϕ ( 6 ) = 12 \frac{0}{12},\frac{1}{12},\frac{2}{12},\frac{3}{12},\frac{4}{12},\frac{5}{12},\frac{6}{12},\frac{7}{12},\frac{8}{12},\frac{9}{12},\frac{10}{12},\frac{11}{12}\\\ \\ \frac{0}{1};\ \frac{1}{2};\ \frac{1}{3},\frac{2}{3};\ \frac{1}{4},\frac{3}{4};\ \frac{1}{6},\frac{5}{6};\ \frac{1}{12},\frac{5}{12},\frac{7}{12},\frac{11}{12}\\\ \\ \phi(1)+\phi(2)+\phi(3)+\phi(4)+\phi(6)=12 120,121,122,123,124,125,126,127,128,129,1210,1211 10; 21; 31,32; 41,43; 61,65; 121,125,127,1211 ϕ(1)+ϕ(2)+ϕ(3)+ϕ(4)+ϕ(6)=12 -
mu可以这么定义
μ ( d ) : ∑ d ∣ n μ ( d ) = [ n = 1 ] \mu(d):\sum_{d|n}\mu(d)=[n=1] μ(d):d∣n∑μ(d)=[n=1]
反过来可以看作是容斥的系数证明,即
∑ d ∣ n μ ( d ) = ∑ i = 0 k C ( k , i ) ⋅ ( − 1 ) i = ( 1 − 1 ) k = 0 \sum_{d|n}\mu(d)=\sum_{i=0}^kC(k,i)\cdot(-1)^i=(1-1)^k=0 d∣n∑μ(d)=i=0∑kC(k,i)⋅(−1)i=(1−1)k=0
- mu的性质:
g ( n ) = ∑ d ∣ n f ( d ) ↔ f ( n ) = ∑ d ∣ n g ( n d ) μ ( d ) g(n)=\sum_{d|n}f(d)\leftrightarrow f(n)=\sum_{d|n}g(\frac{n}{d})\mu(d) g(n)=d∣n∑f(d)↔f(n)=d∣n∑g(dn)μ(d)
A.K.A.莫比乌斯反演
常见积性函数
- τ ( n ) = σ 0 ( n ) = ∑ d ∣ n 1 \tau(n)=\sigma_0(n)=\sum_{d|n}{1} τ(n)=σ0(n)=∑d∣n1 约数个数
- σ ( n ) = σ 1 ( n ) = ∑ d ∣ n d \sigma(n)=\sigma_1(n)=\sum_{d|n}{d} σ(n)=σ1(n)=∑d∣nd 约数和
- σ k ( n ) = ∑ d ∣ n d k \sigma_k(n)=\sum_{d|n}{d^k} σk(n)=∑d∣ndk 约数和的k次幂
- e ( n ) = [ n = 1 ] e(n)=[n=1] e(n)=[n=1]
- I ( n ) = 1 I(n)=1 I(n)=1 恒等函数
- i d ( n ) = n id(n)=n id(n)=n
- i d k ( n ) = n k id^k(n)=n^k idk(n)=nk
2.迪利克雷卷积
定义
( f ∗ g ) ( n ) = ∑ d ∣ n f ( d ) ⋅ g ( n d ) = ∑ i j = n f ( i ) ⋅ g ( j ) (f*g)(n)=\sum_{d|n}{f(d)\cdot g(\frac{n}{d})}=\sum_{ij=n}{f(i)\cdot g(j)} (f∗g)(n)=d∣n∑f(d)⋅g(dn)=ij=n∑f(i)⋅g(j)
(可以类比多项式乘法的卷积,n次项系数为 h ( n ) = ∑ i + j = n f ( i ) ⋅ g ( j ) h(n)=\sum_{i+j=n}{f(i)\cdot g(j)} h(n)=∑i+j=nf(i)⋅g(j))
性质
-
交换律、结合律,对加法满足分配律
-
若f和g为积性,则 f ∗ g f*g f∗g 积性
-
e ( n ) = [ n = 1 ] e(n)=[n=1] e(n)=[n=1]是单位元
f ∗ e = f = e ∗ f f*e=f=e*f f∗e=f=e∗f -
莫比乌斯函数与恒等函数互为逆元,即
μ ∗ I = e g = f ∗ I ↔ f = g ∗ μ ( ∵ g ∗ μ = f ∗ I ∗ μ ) \mu*I=e\\ \ g=f*I \leftrightarrow\ f=g*\mu\\(\because g*\mu=f*I*\mu) μ∗I=e g=f∗I↔ f=g∗μ(∵g∗μ=f∗I∗μ) -
上面的结论就是莫比乌斯反演的卷积版,已知g时,用来求f
-
试对欧拉函数用莫比乌斯反演得到:
∵ ϕ ∗ I = i d ∴ ϕ = i d ∗ μ \because\phi*I=id\\ \therefore \phi=id*\mu ∵ϕ∗I=id∴ϕ=id∗μ
展开移项得到:
φ ( n ) n = ∑ d ∣ n μ ( d ) d \frac{\varphi(n)}{n}=\sum_{d|n}{\frac{\mu(d)}{d}} nφ(n)=d∣n∑dμ(d) -
狄利克雷卷积的一个常用技巧是对于积性函数 f f f与恒等函数 I I I的卷积的处理:
n = ∏ i = 1 t p i k i , g ( n ) = ∑ d ∣ n f ( d ) g ( n ) = ∏ i = 1 t ∑ j = 0 k i f ( p i j ) n=\prod_{i=1}^{t}{p_i^{k_i}},g(n)=\sum_{d|n}{f(d)}\\ g(n)=\prod_{i=1}^{t}\sum_{j=0}^{k_i}{f(p_i^j)} n=i=1∏tpiki,g(n)=d∣n∑f(d)g(n)=i=1∏tj=0∑kif(pij)
3.历年题目
7738 - Fibonacci ICPC 2016 青岛 E 结论生僻
Just a Math Problem CCPC 2016 杭州 J
Cow`s Segment CCPC 2017 harbin I
Mod, Xor and Everything CCPC 2017 杭州L 难
4.例题
例题1 积性函数&迪利克雷卷积应用
题意
定义
f
(
n
)
=
f(n)=
f(n)=选两个 $[0,n)
的整数
的整数
的整数 a,b$ ,且 ab不是n的倍数方案。
求
g
(
n
)
=
∑
d
∣
n
f
(
d
)
g(n)=\sum_{d|n}f(d)
g(n)=∑d∣nf(d)
分析
由题意得到:
f
(
n
)
=
n
2
−
∑
d
∣
n
ϕ
(
n
d
)
⋅
d
f(n)=n^2-\sum_{d|n}\phi(\frac{n}{d})\cdot d
f(n)=n2−d∣n∑ϕ(dn)⋅d
这个式子可以这么理解,首先求问题的反面,即
n
∣
a
b
n|ab
n∣ab的方案数。 当
a
=
k
⋅
j
a=k\cdot j
a=k⋅j时,
b
b
b必须取与 $ i=n/j$ 互质的数。
a
a
a的取值有
n
/
j
n/j
n/j种,
b
b
b的取值有
ϕ
(
i
)
\phi(i)
ϕ(i)种,有
∑
i
j
=
n
ϕ
(
i
)
⋅
j
=
∑
d
∣
n
ϕ
(
n
d
)
⋅
d
\sum_{ij=n}\phi(i)\cdot j=\sum_{d|n}\phi(\frac{n}{d})\cdot d
ij=n∑ϕ(i)⋅j=d∣n∑ϕ(dn)⋅d
设
h
(
n
)
=
∑
d
∣
n
ϕ
(
n
d
)
⋅
d
h(n)=\sum_{d|n}\phi(\frac{n}{d})\cdot d
h(n)=d∣n∑ϕ(dn)⋅d
有
g
(
n
)
=
∑
d
∣
n
f
(
d
)
=
∑
d
∣
n
(
d
2
−
h
(
d
)
)
g(n)=\sum_{d|n}f(d)=\sum_{d|n}(d^2-h(d))
g(n)=d∣n∑f(d)=d∣n∑(d2−h(d))
设
P
(
n
)
=
∑
d
∣
n
d
2
,
Q
(
n
)
=
∑
d
∣
n
h
(
d
)
P(n)=\sum_{d|n}d^2,Q(n)=\sum_{d|n}h(d)
P(n)=d∣n∑d2,Q(n)=d∣n∑h(d)
根据积性函数的性质,求单个
P
(
n
)
,
Q
(
n
)
P(n),Q(n)
P(n),Q(n),我们只需要计算
P
(
p
k
)
,
Q
(
p
k
)
P(p^k),Q(p^k)
P(pk),Q(pk)乘起来就可以得到
P
(
n
)
,
Q
(
n
)
P(n),Q(n)
P(n),Q(n)。而这是很容易计算的,因为
p
k
p^k
pk的因数只有
p
0
,
p
1
,
⋯
,
p
k
p^0,p^1,⋯,p^k
p0,p1,⋯,pk。(这也是线性筛的原理)
剩下的是质因数分解的复杂度 O ( n ln n ) O(\frac{\sqrt n}{\ln \sqrt n}) O(lnnn),证明在质数知识点里讨论过。
其实
Q
(
n
)
Q(n)
Q(n)可以进一步化简:
Q
(
n
)
=
∑
d
∣
n
h
(
d
)
=
Q
(
n
)
=
∑
d
∣
n
∑
w
∣
d
ϕ
(
w
)
⋅
d
w
=
I
∗
ϕ
∗
i
d
=
i
d
∗
i
d
=
∑
d
∣
n
d
⋅
n
d
=
n
⋅
∑
d
∣
n
1
=
n
⋅
τ
(
n
)
Q(n)=\sum_{d|n}h(d)=Q(n)=\sum_{d|n}\sum_{w|d}\phi(w)\cdot\frac{d}{w}\\\ \\ =I*\phi*id=id*id=\sum_{d|n}d\cdot\frac{n}{d}=n\cdot \sum_{d|n}{1}=n\cdot\tau(n)
Q(n)=d∣n∑h(d)=Q(n)=d∣n∑w∣d∑ϕ(w)⋅wd =I∗ϕ∗id=id∗id=d∣n∑d⋅dn=n⋅d∣n∑1=n⋅τ(n)
例题2 积性函数递推性质
题意
定义 f 0 ( n ) f_0(n) f0(n)为满足??=?且gcd(?,?)=1的对数。
定义
f
r
+
1
=
∑
u
v
=
1
f
r
(
u
)
+
f
r
(
v
)
2
f_{r+1}=\sum_{uv=1} \frac{f_r(u)+f_r(v)}{2}
fr+1=uv=1∑2fr(u)+fr(v)
q组询问
f
r
(
n
)
f_r(n)
fr(n) q,r,n<1e6
分析
定义 ω ( n ) \omega(n) ω(n)为n的不同质因子g个数,则 f 0 = 2 ω ( n ) f_0=2^{\omega(n)} f0=2ω(n).
注意到 f r f_r fr为积性,所以 f r + 1 f_{r+1} fr+1也为积性.
由于积性,我们只需要求 f r ( p k ) f_r(p^k) fr(pk).
注意到 ∀ p , f 0 ( p ) = 2 \forall p,f_0(p)=2 ∀p,f0(p)=2,所以 ∀ p , f r ( p k ) \forall p,f_r(p^k) ∀p,fr(pk)是定值如果r,k是定值。
又注意到k是O(logn)的,前缀和优化求 f r + 1 ( p k ) = ∑ i = 0 k f r ( p i ) f_{r+1}(p^k)=\sum_{i=0}^kf_r(p^i) fr+1(pk)=∑i=0kfr(pi),使用O(rlogn)的时间预处理出所有可能的 f r ( p k ) f_r(p^k) fr(pk)的询问。
剩下质因数分解的复杂度。
例题3 积性函数前缀和
题意
四川省赛grisaia
a
n
s
=
∑
i
=
1
n
∑
j
=
1
i
(
n
m
o
d
(
i
×
j
)
)
ans =\sum^n_{i=1}\sum^i_{j=1} (n\ mod (i \times j))
ans=i=1∑nj=1∑i(n mod(i×j))
1
≤
n
≤
1
0
11
1 ≤ n ≤ 10^{11}
1≤n≤1011
分析
如果 f§可以在 O(logn)的时间内求出来,求出质数项的总时间是?(?)的;
通常,f(pk)可以比较容易的由 f ( p k − 1 ) f(p^{k-1}) f(pk−1)等值递推出来。其他项可以直接由积性函数的性质 f ( x ) = f ( d ) ∗ f ( x d ) f(x)=f(d)*f(\frac{x}{d}) f(x)=f(d)∗f(dx)得到。因此,很多积性函数都可以在欧拉筛的过程中顺便递推出,很多积性函数都可以在欧拉筛的过程中顺便递推出前 ?项的值,时间复杂度为 ?(?)。
此题要求低于线性时间前缀和。
解法1
公式推导:
a
n
s
=
∑
i
=
1
n
∑
j
=
1
i
(
n
m
o
d
(
i
×
j
)
)
=
∑
i
=
1
n
∑
j
=
1
i
(
n
−
⌊
n
/
i
j
⌋
⋅
i
j
)
ans =\sum^n_{i=1}\sum^i_{j=1} (n\ mod (i \times j))=\sum^n_{i=1}\sum^i_{j=1}(n-\lfloor n/ij\rfloor\cdot ij)
ans=i=1∑nj=1∑i(n mod(i×j))=i=1∑nj=1∑i(n−⌊n/ij⌋⋅ij)
而
∑
i
=
1
n
∑
j
=
1
i
⌊
n
i
j
⌋
⋅
i
j
=
(
∑
i
=
1
n
∑
j
=
1
n
⌊
n
i
j
⌋
⋅
i
j
+
∑
i
=
1
n
⌊
n
i
2
⌋
i
2
)
/
2
\sum^n_{i=1}\sum^i_{j=1} \lfloor \frac{n}{ij}\rfloor\cdot ij=(\sum^n_{i=1}\sum^n_{j=1} \lfloor \frac{n}{ij}\rfloor\cdot ij+\sum_{i=1}^n \lfloor \frac{n}{i^2}\rfloor i^2)/2
i=1∑nj=1∑i⌊ijn⌋⋅ij=(i=1∑nj=1∑n⌊ijn⌋⋅ij+i=1∑n⌊i2n⌋i2)/2
令a=
∑
i
=
1
n
∑
j
=
1
n
⌊
n
i
j
⌋
⋅
i
j
\sum^n_{i=1}\sum^n_{j=1} \lfloor \frac{n}{ij}\rfloor\cdot ij
∑i=1n∑j=1n⌊ijn⌋⋅ij,
f
(
n
)
=
∑
i
=
1
n
⌊
n
i
⌋
i
f(n)=\sum_{i=1}^n \lfloor \frac{n}{i}\rfloor i
f(n)=∑i=1n⌊in⌋i则
a
=
∑
i
=
1
n
∑
j
=
1
n
i
⋅
⌊
⌊
n
i
⌋
j
⌋
⋅
j
=
∑
i
=
1
n
i
∑
j
=
1
n
⌊
⌊
n
i
⌋
j
⌋
⋅
j
=
∑
i
=
1
n
i
⋅
f
(
⌊
n
i
⌋
)
a=\sum^n_{i=1}\sum^n_{j=1} i\cdot\lfloor \frac{\lfloor \frac{n}{i}\rfloor}{j}\rfloor\cdot j\\\ \\ =\sum^n_{i=1}i\sum^n_{j=1} \lfloor \frac{\lfloor \frac{n}{i}\rfloor}{j}\rfloor\cdot j\\\ \\ =\sum^n_{i=1}i\cdot f(\lfloor \frac{n}{i}\rfloor)
a=i=1∑nj=1∑ni⋅⌊j⌊in⌋⌋⋅j =i=1∑nij=1∑n⌊j⌊in⌋⌋⋅j =i=1∑ni⋅f(⌊in⌋)
O
(
n
)
O(\sqrt n)
O(n)地枚举
⌊
n
i
⌋
\lfloor \frac{n}{i}\rfloor
⌊in⌋,然后
O
(
⌊
n
i
⌋
)
O(\sqrt{\lfloor \frac{n}{i}\rfloor})
O(⌊in⌋) 地计算
f
(
⌊
n
i
⌋
)
f(\lfloor \frac{n}{i}\rfloor)
f(⌊in⌋)时间复杂度为
O
(
∑
i
=
1
n
⌊
n
i
⌋
)
=
O
(
n
3
4
)
O(\sum_{i=1}^{\sqrt{n}} \sqrt{\lfloor \frac{n}{i}\rfloor})=O(n^{\frac{3}{4}})
O(i=1∑n⌊in⌋)=O(n43)
O(1)读写f的技巧:用两个
n
\sqrt n
n大小的数组。
解法2
定义g(n)=f(n)-f(n-1),
g
(
n
)
=
∑
i
=
1
n
i
⋅
(
⌊
n
i
⌋
−
⌊
n
−
1
i
⌋
)
=
∑
i
∣
n
i
g(n)=\sum_{i=1}^ni\cdot(\lfloor \frac{n}{i}\rfloor-\lfloor \frac{n-1}{i}\rfloor)=\sum_{i|n}i
g(n)=i=1∑ni⋅(⌊in⌋−⌊in−1⌋)=i∣n∑i
求其前
n
2
3
n^\frac{2}{3}
n32项及其前缀和。对于
⌊
n
i
⌋
>
n
2
3
\lfloor \frac{n}{i}\rfloor>n^\frac{2}{3}
⌊in⌋>n32暴力计算
f
(
⌊
n
i
⌋
)
f(\lfloor \frac{n}{i}\rfloor)
f(⌊in⌋),复杂度为
O
(
∑
i
=
1
n
1
3
⌊
n
i
⌋
)
=
O
(
n
2
3
)
O(\sum_{i=1}^{n^{\frac{1}{3}}} \sqrt{\lfloor \frac{n}{i}\rfloor})=O(n^{\frac{2}{3}})
O(i=1∑n31⌊in⌋)=O(n32)
例题4 莫比乌斯反演
题意
YY的GCD
∑
i
=
1
n
∑
j
=
1
m
[
g
c
d
(
i
,
j
)
=
p
]
(
n
,
m
⩽
1
e
7
)
\sum\limits ^{n}_{i=1}\sum\limits ^{m}_{j=1}[ gcd( i,j) =p]\\( n,m\leqslant 1e7)
i=1∑nj=1∑m[gcd(i,j)=p](n,m⩽1e7)
分析
将p提出来,
a
n
s
=
∑
i
=
1
⌊
n
p
⌋
∑
j
=
1
⌊
m
p
⌋
[
g
c
d
(
i
,
j
)
=
1
]
ans=\sum\limits ^{\lfloor \frac{n}{p} \rfloor}_{i=1}\sum\limits ^{\lfloor \frac{m}{p} \rfloor}_{j=1}[ gcd( i,j) =1]\\
ans=i=1∑⌊pn⌋j=1∑⌊pm⌋[gcd(i,j)=1]
根据容斥
∣
⋃
i
=
1
n
A
i
∣
=
∑
∅
≠
J
⊆
{
1
,
2
,
…
,
n
}
(
−
1
)
∣
J
∣
−
1
∣
⋂
j
∈
J
A
j
∣
\left|\bigcup_{i=1}^n A_i \right| = \sum_{\emptyset \neq J\subseteq \{1,2,\ldots ,n\}} (-1)^{|J|-1}{\Biggl |}\bigcap_{j\in J}A_{j}{\Biggr |}
i=1⋃nAi
=∅=J⊆{1,2,…,n}∑(−1)∣J∣−1
j∈J⋂Aj
得到
a
n
s
=
∑
p
∑
d
=
1
⌊
m
i
n
(
m
,
n
)
p
⌋
μ
(
d
)
⌊
n
p
d
⌋
⌊
m
p
d
⌋
=
∑
i
=
1
m
i
n
(
n
,
m
)
⌊
n
i
⌋
⌊
m
i
⌋
∑
p
∣
i
μ
(
i
p
)
ans=\sum\limits _{p}\sum\nolimits ^{\lfloor \frac{min( m,n)}{p} \rfloor }_{d=1} \mu ( d) \lfloor \frac{n}{pd} \rfloor \lfloor \frac{m}{pd} \rfloor\\\ \\ =\sum ^{min( n,m)}_{i=1} \lfloor \frac{n}{i} \rfloor \lfloor \frac{m}{i} \rfloor \sum\limits _{p|i} \mu \left(\frac{i}{p}\right)
ans=p∑∑d=1⌊pmin(m,n)⌋μ(d)⌊pdn⌋⌊pdm⌋ =i=1∑min(n,m)⌊in⌋⌊im⌋p∣i∑μ(pi)
定义
f
(
i
)
=
∑
p
∣
i
μ
(
i
p
)
f(i)=\sum\limits _{p|i} \mu \left(\frac{i}{p}\right)
f(i)=p∣i∑μ(pi)
则
a
n
s
=
∑
i
=
1
m
i
n
(
n
,
m
)
⌊
n
i
⌋
⌊
m
i
⌋
f
(
i
)
ans=\sum ^{min( n,m)}_{i=1} \lfloor \frac{n}{i} \rfloor \lfloor \frac{m}{i} \rfloor f(i)
ans=i=1∑min(n,m)⌊in⌋⌊im⌋f(i)
预处理f即可
O
(
n
+
m
)
O(\sqrt n+\sqrt m )
O(n+m)地回答每组询问.
若暴力求f,复杂度 O ( n l o g l o g n ) O(n loglogn) O(nloglogn)
观察得到递推式:
设x为n的最小质因子,若
x
2
∣
n
,
f
(
n
)
=
μ
(
n
/
x
)
x^2|n,f(n)=\mu(n/x)
x2∣n,f(n)=μ(n/x)否则:
f
(
n
)
=
μ
(
n
/
x
)
+
μ
(
x
)
f
(
n
/
x
)
=
μ
(
n
/
x
)
−
f
(
n
/
x
)
f(n)=\mu(n/x)+\mu(x)f(n/x)=\mu(n/x)-f(n/x)
f(n)=μ(n/x)+μ(x)f(n/x)=μ(n/x)−f(n/x)
用线性筛做到O(n)
例题5 杜教筛求数论函数前缀和
分析
如果能通过狄利克雷卷积构造一个更好计算前缀和的函数,且用于卷积的另一个函数也易计算,则可以简化计算过程。
具体来说,设S(n)为f(n)的前缀和.
∀
\forall
∀数论函数
g
g
g ,设
h
=
f
∗
g
h=f*g
h=f∗g,有
∑
i
=
1
n
h
(
i
)
=
∑
i
=
1
n
∑
d
∣
i
f
(
d
)
⋅
g
(
i
d
)
=
∑
i
=
1
n
g
(
i
)
S
(
⌊
n
i
⌋
)
\sum_{i=1}^{n}h(i)=\sum_{i=1}^{n}\sum_{d|i}f(d)\cdot g(\frac{i}{d})\\\ \\ =\sum_{i=1}^{n}g(i)S(\lfloor \frac{n}{i}\rfloor)
i=1∑nh(i)=i=1∑nd∣i∑f(d)⋅g(di) =i=1∑ng(i)S(⌊in⌋)
移项得
g
(
1
)
S
(
n
)
=
∑
i
=
1
n
h
(
i
)
−
∑
i
=
2
n
g
(
i
)
S
(
⌊
n
i
⌋
)
g(1)S(n)=\sum_{i=1}^{n}h(i)-\sum_{i=2}^{n}g(i)S(\lfloor \frac{n}{i}\rfloor)
g(1)S(n)=i=1∑nh(i)−i=2∑ng(i)S(⌊in⌋)
对于可以
O
(
n
)
O(\sqrt n)
O(n)求h前缀和,
O
(
1
)
O(1)
O(1)求g的情况,复杂度为
O
(
∑
i
=
1
n
⌊
n
i
⌋
)
=
O
(
n
3
4
)
O(\sum_{i=1}^{\sqrt{n}} \sqrt{\lfloor \frac{n}{i}\rfloor})=O(n^{\frac{3}{4}})
O(∑i=1n⌊in⌋)=O(n43).
如果f有较好的性质(比如积性函数),可以线性筛求其前 n 2 3 n^\frac{2}{3} n32项, > n 2 3 >n^\frac{2}{3} >n32递归计算,复杂度为 O ( n 2 3 ) O(n^\frac{2}{3}) O(n32)
题意
【模板】杜教筛(Sum)
blog
∑
i
=
1
n
φ
(
i
)
∑
i
=
1
n
μ
(
i
)
\sum_{i=1}^{n}{\varphi(i)}\\ \sum_{i=1}^{n}{\mu(i)}
i=1∑nφ(i)i=1∑nμ(i)
hdu 5608 function
huntian oy 杜教筛进阶
blog
$$
n2-3n+2=\sum_{d|n}f(d),求\sum_{i=1}nf(i)\ mod \ 10^9+7\\ \
\sum_{i=1}^n\varphi(i)*i
$$
divcnt3 阁洲筛/扩展欧拉筛ees
2016年数论函数论文
blog 类欧几里得
S
3
(
n
)
=
∑
i
=
1
n
σ
0
(
i
3
)
.
S_3(n) = \sum _{i=1}^n \sigma_0(i^3).
S3(n)=i=1∑nσ0(i3).
Just a Math Problem CCPC 2016 杭州 J
非套路线性求和,令
ω
(
n
)
\omega(n)
ω(n)为质因数个数。
∑
i
=
1
n
2
ω
(
n
)
\sum_{i=1}^n2^{\omega(n)}
i=1∑n2ω(n)
more exe:
51Nod 1244 - 莫比乌斯函数之和
51Nod 1239 - 欧拉函数之和
BZOJ 3944 - Sum
HDU 5608 - function
51Nod 1238 - 最小公倍数之和 V3
51Nod 1237 - 最大公约数之和 V3
51Nod 1227 - 平均最小公倍数
Tsinsen A1231 - Crash的数字表格
SPOJ DIVCNT2 - Counting Divisors (square)
51Nod 1222 - 最小公倍数计数(复杂度分析)
BZOJ 4176 - Lucas的数论
51Nod 1220 - 约数之和
51Nod 1584 - 加权约数和
ZOJ 3881 - From the ABC conjecture(不需要使用正文方法)
BZOJ 3512 - DZY Loves Math IV
ZOJ 5340 - The Sum of Unitary Totient(常规积性函数求和,数据组数较多,只可分段打表)
SPOJ DIVCNT3 - Counting Divisors (cube)(常规积性函数求和,注意代码长度限制,不可打表)
51Nod 1575 - Gcd and Lcm(常规积性函数求和,可分段打表)
51Nod 1847 - 奇怪的数学题(非常规积性函数求和,综合题,可分段打表)