莫比乌斯反演一些式子的推导(附题目)

目录

一、一些符号和等式

1. a b 1.a|b 意为 a a 整除 b b
2. [ a = b ] = { 1 , a = b 0 , a b 2.[a=b]=\begin{cases} 1,a=b\\0,a ≠b \end{cases}
3. a 3.\lfloor a \rfloor 意为对 a a 向下取整
4. n / d k = n d k 4.\lfloor \frac{\lfloor n/d \rfloor}{k} \rfloor = \lfloor \frac{n}{dk} \rfloor

二、狄利克雷卷积

关于狄利克雷卷积,请戳这里
然后莫比乌斯反演中需要知道的是
φ \varphi 为欧拉函数, μ \mu 为莫比乌斯函数, i d ( n ) = n id(n)=n ε ( n ) = [ n = 1 ] \varepsilon(n)=[n=1] I ( n ) = 1 I(n)=1
φ I = i d \varphi*I=id
μ I = ε \mu*I=\varepsilon
在①等式两边同时 μ *\mu ,我们可以得到 φ I μ = μ i d \varphi*I*\mu=\mu*id
再根据②,我们有 φ ε = μ i d \varphi*\varepsilon=\mu*id
对于任意数论函数都有 f = f ε f=f*\varepsilon ,故最终我们有:
μ i d = φ \mu*id=\varphi
这里面③是非常重要的,它揭示了欧拉函数和莫比乌斯函数的关系,在有些式子的化简当中起到至关重要的作用

三、莫比乌斯反演

对于莫比乌斯反演的题目,我们只要记住上面的①式就行,写开之后就是这样
d n μ ( d ) = [ n = 1 ] \displaystyle\sum_{d|n}\mu(d)=[n=1]
那么 [ g c d ( i , j ) = 1 ] [gcd(i,j)=1] 就有
d g c d ( i , j ) μ ( d ) = [ g c d ( i , j ) = 1 ] \displaystyle\sum_{d|gcd(i,j)}\mu(d)=[gcd(i,j)=1]
亦可以写作
d i , d j μ ( d ) = [ g c d ( i , j ) = 1 ] \displaystyle\sum_{d|i,d|j}\mu(d)=[gcd(i,j)=1]
再做一下拓展求 [ g c d ( i , j ) = k ] [gcd(i,j)=k]
[ g c d ( i , j ) = k ] [ g c d ( i k , j k ) = 1 ] [gcd(i,j)=k]\Leftrightarrow[gcd(\frac{i}{k},\frac{j}{k})=1] ,故有
d i k d j k μ ( d ) = [ g c d ( i , j ) = k ] \displaystyle\sum_{d|\frac{i}{k},d|\frac{j}{k}}\mu(d)=[gcd(i,j)=k]

四、经典式子的推导

1. i = 1 n j = 1 n [ g c d ( i , j ) = 1 ] \displaystyle\sum_{i=1}^{n}\displaystyle\sum_{j=1}^{n}[gcd(i,j)=1]

推导过程

i = 1 n j = 1 n [ g c d ( i , j ) = 1 ] = i = 1 n j = 1 n d i , d j μ ( d ) = d = 1 n μ ( d ) d i d j 1 = d = 1 n μ ( d ) i = 1 n / d j = 1 n / d 1 = d = 1 n μ ( d ) n d 2 \begin{aligned} \displaystyle\sum_{i=1}^{n}\displaystyle\sum_{j=1}^{n}[gcd(i,j)=1] & = \displaystyle\sum_{i=1}^{n} \displaystyle\sum_{j=1}^{n} \displaystyle\sum_{d|i, d|j} \mu(d) \\ & = \displaystyle\sum_{d=1}^{n} \mu(d) \displaystyle\sum_{d|i} \displaystyle\sum_{d|j} 1\\ & = \displaystyle\sum_{d=1}^{n}\mu(d)\displaystyle\sum_{i=1}^{\lfloor n/d \rfloor}\displaystyle\sum_{j=1}^{\lfloor n/d \rfloor}1\\ & = \displaystyle\sum_{d=1}^{n}\mu(d) \lfloor \frac{n}{d} \rfloor ^ 2 \end{aligned}

其中的第二步,先枚举 d d
再看下一步,因为 d i , d j d|i,d|j ,因此 i i j j 一定是 d d 的整数倍
于是我们枚举 i = 1 , 2 , . . . , n / d i=1, 2, ..., \lfloor n/d \rfloor ,那么 i d i*d 就是原来的 i i 值,这样就能保证 d i d|i
代码实现比较简单,求一个 μ ( i ) \mu(i) 的前缀和,加一个数论分块就行

2. i = 1 n j = 1 n [ g c d ( i , j ) = k ] \displaystyle\sum_{i=1}^{n}\displaystyle\sum_{j=1}^{n}[gcd(i,j)=k]

推导过程

i = 1 n j = 1 n [ g c d ( i , j ) = k ] = i = 1 n j = 1 n d i k , d j k μ ( d ) = i = 1 n / k j = 1 n / k d i , d j μ ( d ) = d = 1 n μ ( d ) i = 1 n / d k j = 1 n / d k 1 = d = 1 n μ ( d ) n d k 2 \begin{aligned} \displaystyle\sum_{i=1}^{n}\displaystyle\sum_{j=1}^{n}[gcd(i,j)=k] & = \displaystyle\sum_{i=1}^{n}\displaystyle\sum_{j=1}^{n}\displaystyle\sum_{d|\frac{i}{k},d|\frac{j}{k}}\mu(d) \\ & = \displaystyle\sum_{i=1}^{\lfloor n/k \rfloor}\displaystyle\sum_{j=1}^{\lfloor n/k \rfloor}\displaystyle\sum_{d|i,d|j}\mu(d) \\ & = \displaystyle\sum_{d=1}^{n}\mu(d)\displaystyle\sum_{i=1}^{\lfloor n/dk \rfloor}\displaystyle\sum_{j=1}^{\lfloor n/dk \rfloor}1\\ & = \displaystyle\sum_{d=1}^{n}\mu(d) \lfloor \frac{n}{dk} \rfloor ^ 2 \end{aligned}
其中第二步我们将 i i j j 同时缩小了 k k 倍,于是有 i = 1 n / k j = 1 n / k d i , d j μ ( d ) \displaystyle\sum_{i=1}^{\lfloor n/k \rfloor}\displaystyle\sum_{j=1}^{\lfloor n/k \rfloor}\displaystyle\sum_{d|i,d|j}\mu(d)
其余部分和上一条一样的

练习题

3. i = 1 n j = 1 n g c d ( i , j ) \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} gcd(i, j)

推导过程

i = 1 n j = 1 n g c d ( i , j ) = d = 1 n i = 1 n j = 1 n d [ g c d ( i , j ) = d ] = d = 1 n d i = 1 n j = 1 n [ g c d ( i , j ) = d ] = d = 1 n d i = 1 n / d j = 1 n / d [ g c d ( i , j ) = 1 ] = d = 1 d i = 1 n / d j = 1 n / d t i , t j μ ( t ) = d = 1 d t = 1 n / d μ ( t ) n d t 2 \begin{aligned} \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} gcd(i, j) & = \displaystyle\sum_{d = 1}^{n} \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n}d[gcd(i, j)= d] \\ & = \displaystyle\sum_{d = 1}^{n} d \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n}[gcd(i, j) = d] \\ & = \displaystyle\sum_{d = 1}^{n} d \displaystyle\sum_{i = 1}^{ \lfloor n / d \rfloor } \displaystyle\sum_{j = 1}^{ \lfloor n / d \rfloor } [gcd(i, j) = 1] \\ & = \displaystyle\sum_{d = 1} d \displaystyle\sum_{i = 1}^{ \lfloor n / d \rfloor } \displaystyle\sum_{j = 1}^{ \lfloor n / d \rfloor } \displaystyle\sum_{t | i, t|j} \mu(t) \\ & = \displaystyle\sum_{d = 1} d \displaystyle\sum_{t = 1}^{ \lfloor n / d \rfloor } \mu(t) \lfloor \frac{n}{dt} \rfloor ^ 2 \end{aligned}
到这里,我们已经能够在 O ( n ) O(n) 的时间内计算,但是还不够,我们仍可以继续优化下去
T = t d T=td ,要使 n d t > 0 \lfloor \frac{n}{dt} \rfloor \gt 0 ,于是我们枚举 T = t d = 1 , 2 , . . . , n T = td = 1, 2, ..., n
i = 1 n j = 1 n g c d ( i , j ) = T = 1 n n T 2 t T μ ( d ) ( T d ) \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} gcd(i, j) = \displaystyle\sum_{T = 1}^{n} \lfloor \frac{n}{T} \rfloor ^ 2 \displaystyle\sum_{t | T} \mu(d)(\frac{T}{d})
注意, t T μ ( d ) ( T d ) = ( μ i d ) ( T ) = φ ( T ) \displaystyle\sum_{t | T} \mu(d)(\frac{T}{d}) = (\mu*id)(T)=\varphi(T)
所以最终我们有
i = 1 n j = 1 n g c d ( i , j ) = T = 1 n n T 2 φ ( T ) \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} gcd(i, j) = \displaystyle\sum_{T = 1}^{n} \lfloor \frac{n}{T} \rfloor ^ 2 \varphi(T)
这样就能够 O ( n ) O(\sqrt n) 计算出我们的答案
记住这里的优化方式,以后会经常碰到,当你发现优化不下去的时候,考虑代换

练习题

4. i = 1 n j = 1 n l c m ( i , j ) \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} lcm(i, j)

推导过程

首先 l c m ( i , j ) = i j g c d ( i , j ) lcm(i, j) = \frac{ij}{gcd(i,j)}
i = 1 n j = 1 n l c m ( i , j ) = i = 1 n j = 1 n i j g c d ( i , j ) = d = 1 n i = 1 n / d j = 1 n / d i d j d d [ g c d ( i , j ) = 1 ] = d = 1 n d i = 1 n / d j = 1 n / d i j t i , t j μ ( t ) = d = 1 n d t = 1 n / d μ ( t ) i = 1 n / d t i t j = 1 n / d t j t = d = 1 n d t = 1 n / d μ ( t ) t 2 i = 1 n / d t i j = 1 n / d t j \begin{aligned} \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} lcm(i, j) & = \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} \frac{ij}{gcd(i, j)}\\ & = \displaystyle\sum_{d = 1}^{n} \displaystyle\sum_{i = 1}^{\lfloor n/d \rfloor} \displaystyle\sum_{j = 1}^{\lfloor n/d \rfloor} \frac{idjd}{d}[gcd(i, j) = 1] \\ & = \displaystyle\sum_{d = 1}^{n} d \displaystyle\sum_{i = 1}^{\lfloor n/d \rfloor} \displaystyle\sum_{j = 1}^{\lfloor n/d \rfloor} ij \displaystyle\sum_{t | i,t | j} \mu(t) \\ & = \displaystyle\sum_{d = 1}^{n} d \displaystyle\sum_{t = 1}^{\lfloor n/d \rfloor} \mu(t) \displaystyle\sum_{i = 1} ^ {\lfloor n / dt \rfloor} it \displaystyle\sum_{j = 1} ^ {\lfloor n / dt \rfloor} jt \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{t = 1} ^ {\lfloor n / d \rfloor} \mu(t)t ^ 2 \displaystyle\sum_{i = 1} ^ {\lfloor n / dt \rfloor} i \displaystyle\sum_{j = 1} ^ {\lfloor n / dt \rfloor} j \\ \end{aligned}

我们记 s u m 1 ( n ) = 1 + 2 + . . . + n = n ( n + 1 ) / 2 sum_1(n) = 1 + 2 + ... + n = n(n+1)/2
其中 i = 1 n / d t i = 1 + 2 + . . . + n / d t = s u m 1 ( n / d t ) \displaystyle\sum_{i = 1} ^ {\lfloor n / dt \rfloor} i = 1 + 2 + ... + \lfloor n / dt \rfloor = sum_1(\lfloor n / dt \rfloor)
i = 1 n j = 1 n l c m ( i , j ) = d = 1 n d t = 1 n / d μ ( t ) t 2 s u m 1 ( n / d t ) 2 \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} lcm(i, j) = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{t = 1} ^ {\lfloor n / d \rfloor} \mu(t)t ^ 2 sum_1(\lfloor n / dt \rfloor) ^ 2 \\
f ( n ) = t = 1 n μ ( t ) t 2 s u m 1 ( n / t ) 2 f(n)=\displaystyle\sum_{t = 1} ^ {n} \mu(t)t ^ 2 sum_1(\lfloor n / t \rfloor) ^ 2 ,那么 f ( n ) f(n) 可以 O ( n ) O(\sqrt n) 求,于是
i = 1 n j = 1 n l c m ( i , j ) = d = 1 n d f ( n / d ) \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} lcm(i, j) = \displaystyle\sum_{d = 1} ^ n df(\lfloor n / d \rfloor)
最后总体就是 O ( n ) O ( n ) = O ( n ) O(\sqrt n)O(\sqrt n)=O(n)

扫描二维码关注公众号,回复: 11414983 查看本文章

练习题

5. i = 1 n j = 1 n i j g c d ( i , j ) \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} ijgcd(i, j)

推导过程

i = 1 n j = 1 n i j g c d ( i , j ) = d = 1 n d i = 1 n j = 1 n i j [ g c d ( i , j ) = d ] = d = 1 n d i = 1 n / d j = 1 n / d i d j d t i , t j μ ( t ) = d = 1 n d 3 t = 1 n / d μ ( t ) i = 1 n / d t i t j = 1 n / d t j t = d = 1 n d 3 t = 1 n / d μ ( t ) t 2 i = 1 n / d t i j = 1 n / d t j = d = 1 n d 3 t = 1 n / d μ ( t ) t 2 s u m 1 ( n / d t ) 2 \begin{aligned} \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} ijgcd(i, j) & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{i = 1} ^ {n} \displaystyle\sum_{j = 1} ^ {n} ij[gcd(i, j)=d] \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{i = 1} ^ {\lfloor n / d \rfloor} \displaystyle\sum_{j = 1} ^ {\lfloor n / d \rfloor} idjd \displaystyle\sum_{t|i,t|j} \mu(t) \\ & = \displaystyle\sum_{d = 1} ^ {n} d ^ 3 \displaystyle\sum_{t = 1} ^ {\lfloor n / d \rfloor} \mu(t) \displaystyle\sum_{i = 1} ^ {\lfloor n / dt \rfloor} it \displaystyle\sum_{j = 1} ^ {\lfloor n / dt \rfloor} jt \\ & = \displaystyle\sum_{d = 1} ^ {n} d ^ 3 \displaystyle\sum_{t = 1} ^ {\lfloor n / d \rfloor} \mu(t)t ^ 2 \displaystyle\sum_{i = 1} ^ {\lfloor n / dt \rfloor} i \displaystyle\sum_{j = 1} ^ {\lfloor n / dt \rfloor} j \\ & = \displaystyle\sum_{d = 1} ^ {n} d ^ 3 \displaystyle\sum_{t = 1} ^ {\lfloor n / d \rfloor} \mu(t)t ^ 2 sum_1(\lfloor n / dt \rfloor) ^ 2 \\ \end{aligned}
到这里,我们已经能够 O ( n ) O(n) 求得答案,但是别慌,我们仍然可以继续优化
又是熟悉的代换,令 T = d t T = dt ,于是
i = 1 n j = 1 n i j g c d ( i , j ) = T = 1 n s u m 1 ( n / T ) 2 t T μ ( t ) t 2 ( T t ) 3 = T = 1 n s u m 1 ( n / T ) 2 T 2 t T μ ( t ) ( T t ) \begin{aligned} \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} ijgcd(i, j) & = \displaystyle\sum_{T = 1} ^ {n} sum_1(\lfloor n / T \rfloor) ^ 2 \displaystyle\sum_{t | T} \mu(t) t ^ 2 (\frac{T}{t}) ^ 3 \\ & = \displaystyle\sum_{T = 1} ^ {n} sum_1(\lfloor n / T \rfloor) ^ 2 T ^ 2 \displaystyle\sum_{t | T} \mu(t)(\frac{T}{t}) \end{aligned}
又是熟悉的 μ i d = φ \mu*id=\varphi
于是最终
i = 1 n j = 1 n i j g c d ( i , j ) = T = 1 n s u m 1 ( n / T ) 2 T 2 φ ( T ) \displaystyle\sum_{i = 1}^{n} \displaystyle\sum_{j = 1}^{n} ijgcd(i, j) = \displaystyle\sum_{T = 1} ^ {n} sum_1(\lfloor n / T \rfloor) ^ 2 T ^ 2 \varphi(T)
复杂度 O ( n ) O(\sqrt n)

练习题

这道练习题,因为数据比较大,需要用到杜教筛

五、拓展提高

学完了上面的内容之后,相信你应该已经基本掌握了比较经典的莫比乌斯反演
写了一些题,你会发现,莫比乌斯反演难,一是难在推导,二是难在一些预处理,比如要你预先处理好一些不常见的积性函数
下面的题目就按照难度逐个击破

1. i = 1 N j = 1 N l c m ( a i , a j ) \displaystyle\sum_{i = 1} ^ N \displaystyle\sum_{j = 1} ^ N lcm(a_i, a_j)

原题链接

给你 N N 个数 a 1 , a 2 , . . . , a N a_1, a_2, ..., a_N ,其中 1 a i 50000 1\leq a_i \leq 50000 ,求 i = 1 N j = 1 N l c m ( a i , a j ) \displaystyle\sum_{i = 1} ^ N \displaystyle\sum_{j = 1} ^ N lcm(a_i,a_j)

推导过程

是不是看着很熟悉呢?经典推导中第四条
先对式子做基本的变形
i = 1 N j = 1 N l c m ( a i , a j ) = i = 1 N j = 1 N a i a j g c d ( a i , a j ) \displaystyle\sum_{i = 1} ^ N \displaystyle\sum_{j = 1} ^ N lcm(a_i, a_j) = \displaystyle\sum_{i = 1} ^ N \displaystyle\sum_{j = 1} ^ N \frac{a_i a_j}{gcd(a_i, a_j)}
分析一下,光有 a i a_i 是没用的,我们要将式子中 a i a_i 转化为数字才行
所以我们不妨直接枚举 i , j = 1 , 2 , 3 , . . . , n = 50000 i, j = 1, 2, 3, ..., n = 50000 ,这样就有
i = 1 N j = 1 N l c m ( a i , a j ) = i = 1 n j = 1 n c n t i c n t j i j g c d ( i , j ) \displaystyle\sum_{i = 1} ^ N \displaystyle\sum_{j = 1} ^ N lcm(a_i, a_j) = \displaystyle\sum_{i = 1} ^ {n} \displaystyle\sum_{j = 1} ^ {n} cnt_i cnt_j \frac{ij}{gcd(i, j)}
其中 c n t i , c n t j cnt_i,cnt_j 为数 i , j i,j 出现次数,于是我们继续
i = 1 N j = 1 N l c m ( a i , a j ) = d = 1 n i = 1 n j = 1 n c n t i c n t j i j d [ g c d ( i , j ) = d ] = d = 1 n i = 1 n / d j = 1 n / d c n t i d c n t j d i j d 2 d [ g c d ( i , j ) = 1 ] = d = 1 n d i = 1 n / d j = 1 n / d i j c n t i d c n t j d t i , t j μ ( t ) = d = 1 n d t = 1 n / d μ ( t ) t 2 i = 1 n / d t i c n t i d t j = 1 n / d t j c n t j d t = d = 1 n d t = 1 n / d μ ( t ) t 2 ( i = 1 n / d t i c n t i d t ) 2 \begin{aligned} \displaystyle\sum_{i = 1} ^ N \displaystyle\sum_{j = 1} ^ N lcm(a_i, a_j) & = \displaystyle\sum_{d = 1} ^ {n} \displaystyle\sum_{i = 1} ^ {n} \displaystyle\sum_{j = 1} ^ {n} cnt_i cnt_j \frac{ij}{d} [gcd(i, j)=d] \\ & = \displaystyle\sum_{d = 1} ^ {n} \displaystyle\sum_{i = 1} ^ {\lfloor n / d \rfloor} \displaystyle\sum_{j = 1} ^ {\lfloor n / d \rfloor} cnt_{id} cnt_{jd} \frac{i j d ^ 2}{d}[gcd(i, j) = 1] \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{i = 1} ^ {\lfloor n / d \rfloor} \displaystyle\sum_{j = 1} ^ {\lfloor n / d \rfloor} ijcnt_{id} cnt_{jd} \displaystyle\sum_{t | i, t | j} \mu(t) \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{t = 1} ^ {\lfloor n / d \rfloor} \mu(t) t ^ 2 \displaystyle\sum_{i = 1} ^ {\lfloor n / d t \rfloor} i cnt_{i d t} \displaystyle\sum_{j = 1} ^ {\lfloor n / d t \rfloor} j cnt_{j d t} \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{t = 1} ^ {\lfloor n / d \rfloor} \mu(t) t ^ 2 \left( \displaystyle\sum_{i = 1} ^ {\lfloor n / d t \rfloor} i cnt_{i d t} \right) ^ 2 \end{aligned}
到这里我们令 T = d t T=dt
i = 1 N j = 1 N l c m ( a i , a j ) = T = 1 n ( i = 1 n / T i c n t i T ) 2 t T μ ( t ) t 2 ( T t ) = T = 1 n T ( i = 1 n / T i c n t i T ) 2 t T μ ( t ) t \begin{aligned} \displaystyle\sum_{i = 1} ^ N \displaystyle\sum_{j = 1} ^ N lcm(a_i, a_j) & = \displaystyle\sum_{T = 1} ^ {n} \left( \displaystyle\sum_{i = 1} ^ {\lfloor n / T \rfloor} i cnt_{i T} \right) ^ 2 \displaystyle\sum_{t | T} \mu(t) t ^ 2 (\frac{T}{t}) \\ & = \displaystyle\sum_{T = 1} ^ {n} T \left( \displaystyle\sum_{i = 1} ^ {\lfloor n / T \rfloor} i cnt_{i T} \right) ^ 2 \displaystyle\sum_{t | T} \mu(t) t \\ \end{aligned}
先看后面的 t T μ ( t ) t \displaystyle\sum_{t | T} \mu(t)t ,我们记做 f ( T ) f(T) ,我们可以 O ( n l o g n ) O(nlogn) 预处理:

for (int t = 1; t <= n; t++)
        for (int T = t; T <= n; T += t)
            f[T] += mu[t] * t;

关于复杂度,这个是一个调和级数,即 n 1 + n 2 + n 3 + . . . + 1 \frac{n}{1} + \frac{n}{2} + \frac{n}{3} + ... + 1 ,是 n l o g n nlogn 级别的
再看 i = 1 n / T i c n t i T \displaystyle\sum_{i = 1} ^ {\lfloor n / T \rfloor} i cnt_{i T} ,显然它也是是一个关于 T T 的函数
我们记 s ( T ) = i = 1 n / T i c n t i T = T t t T c n t t = 1 T T t t c n t t s(T) = \displaystyle\sum_{i = 1} ^ {\lfloor n / T \rfloor} i cnt_{i T} = \displaystyle\sum_{T | t} \frac{t}{T} cnt_t = \frac{1}{T} \displaystyle\sum_{T | t} t cnt_t
这样也能 O ( n l o g n ) O(nlogn) 预处理

for (int T = 1; T <= n; T++) {
        for (int t = T; t <= n; t += T)
            s[T] += t * cnt[t];
        s[T] /= T;
    }

于是这题就能轻松搞定了

AC代码

2. i = 1 n l c m ( i , n ) \displaystyle\sum_{i = 1} ^ {n} lcm(i, n)

原题链接

推导过程

i = 1 n l c m ( i , n ) = i = 1 n i n g c d ( i , n ) = n i = 1 n i g c d ( i , n ) = n d n i = 1 n / d i d d [ g c d ( i , n d ) = 1 ] = n d n i = 1 n / d i [ g c d ( i , n d ) = 1 ] = n d n i = 1 d i [ g c d ( i , d ) = 1 ] = n d n i = 1 d i t i , t d μ ( t ) = n d n t d μ ( t ) i = 1 d / t i t = n d n t d μ ( t ) t i = 1 d / t i = n d n t d μ ( t ) t d t ( d t + 1 ) 2 = n 2 d n [ t d μ ( t ) d 2 t + t d μ ( t ) d ] = n 2 d n d [ t d μ ( t ) d t + t d μ ( t ) ] = n 2 d n d [ ( μ i d ) ( d ) + ( μ I ) ( d ) ] = n 2 d n d [ φ ( d ) + ε ( d ) ] \begin{aligned} \displaystyle\sum_{i = 1} ^ {n} lcm(i, n) & = \displaystyle\sum_{i = 1} ^ {n} \frac{in}{gcd(i, n)} \\ & = n \displaystyle\sum_{i = 1} ^ {n} \frac{i}{gcd(i, n)} \\ & = n \displaystyle\sum_{d | n} \displaystyle\sum_{i = 1} ^ {n / d} \frac{id}{d} [gcd(i, \frac{n}{d}) = 1] \\ & = n \displaystyle\sum_{d | n} \displaystyle\sum_{i = 1} ^ {n / d} i [gcd(i, \frac{n}{d}) = 1] \\ & = n \displaystyle\sum_{d | n} \displaystyle\sum_{i = 1} ^ {d} i [gcd(i, d) = 1] \\ & = n \displaystyle\sum_{d | n} \displaystyle\sum_{i = 1} ^ {d} i \displaystyle\sum_{t | i, t | d} \mu(t) \\ & = n \displaystyle\sum_{d | n} \displaystyle\sum_{t | d} \mu(t) \displaystyle\sum_{i = 1} ^ {d / t} i t \\ & = n \displaystyle\sum_{d | n} \displaystyle\sum_{t | d} \mu(t)t \displaystyle\sum_{i = 1} ^ {d / t} i \\ & = n \displaystyle\sum_{d | n} \displaystyle\sum_{t | d} \mu(t) t \frac{\frac{d}{t} (\frac{d}{t} + 1) }{2} \\ & = \frac{n}{2} \displaystyle\sum_{d | n} \left[ \displaystyle\sum_{t | d} \mu(t) \frac{d ^ 2}{t} + \displaystyle\sum_{t | d} \mu(t) d \right] \\ & = \frac{n}{2} \displaystyle\sum_{d | n} d \left[ \displaystyle\sum_{t | d} \mu(t) \frac{d}{t} + \displaystyle\sum_{t | d} \mu(t) \right] \\ & = \frac{n}{2} \displaystyle\sum_{d | n} d \left[ \left( \mu*id \right) \left( d \right) + \left( \mu*I \right) \left( d \right) \right] \\ & = \frac{n}{2} \displaystyle\sum_{d | n} d \left[ \varphi \left( d \right) + \varepsilon \left( d \right) \right] \\ \end{aligned}
显然所有答案可以像上一题那样 O ( n l o g n ) O(nlogn) 处理

AC代码

3. i = 1 N g c d ( i 3 , i ) \displaystyle\sum_{i = 1} ^ {N} gcd\left( \lfloor \sqrt[3]{i} \rfloor, i \right)

原题链接(2019年杭电多校第一场)

推导过程

n = N 3 n = \sqrt[3] {N}

i = 1 N g c d ( i 3 , i ) = i = 1 n j = i 3 min ( ( i + 1 ) 3 1 , N ) g c d ( i , j ) = i = 1 n 1 j = i 3 ( i + 1 ) 3 1 g c d ( i , j ) + j = n 3 N g c d ( n , j ) \begin{aligned} \displaystyle\sum_{i = 1} ^ {N} gcd\left( \lfloor \sqrt[3]{i} \rfloor, i \right) & = \displaystyle\sum_{i = 1} ^ {n} \displaystyle\sum_{j = i ^ 3} ^ { \min(\left( i + 1 \right) ^ 3 - 1, N) } gcd(i, j) \\ & = \displaystyle\sum_{i = 1} ^ {n - 1} \displaystyle\sum_{j = i ^ 3} ^ {\left( i + 1 \right) ^ 3 - 1} gcd(i, j) + \displaystyle\sum_{j = n ^ 3} ^ {N} gcd(n, j) \end{aligned}
先求前半部分
不妨记 f ( n ) = i = 1 n j = i 3 ( i + 1 ) 3 1 g c d ( i , j ) f\left( n \right) = \displaystyle\sum_{i = 1} ^ n \displaystyle\sum_{j = i ^ 3} ^ { \left( i + 1 \right) ^ 3 - 1 } gcd\left( i, j \right) ,那么原式就是要求 f ( n 1 ) f\left( n - 1 \right)
f ( n ) = i = 1 n j = i 3 ( i + 1 ) 3 1 g c d ( i , j ) = d = 1 n d i = 1 n j = i 3 ( i + 1 ) 3 1 [ g c d ( i , j ) = d ] = d = 1 n d i = 1 n / d j = ( i d ) 3 / d [ ( i d + 1 ) 3 1 ] / d [ g c d ( i , j ) = 1 ] = d = 1 n d i = 1 n / d j = ( i d ) 3 / d [ ( i d + 1 ) 3 1 ] / d t i , t j μ ( t ) = d = 1 n d t = 1 n / d μ ( t ) ( i = 1 n / d t j = ( i d t ) 3 / d t [ ( i d t + 1 ) 3 1 ] / d t ) \begin{aligned} f\left( n \right) & = \displaystyle\sum_{i = 1} ^ {n} \displaystyle\sum_{j = i ^ 3} ^ { \left( i + 1 \right) ^ 3 - 1 } gcd\left( i, j \right) \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{i = 1} ^ {n} \displaystyle\sum_{j = i ^ 3} ^ {\left( i + 1 \right) ^ 3 - 1} \left[ gcd\left( i, j \right) = d \right] \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{i = 1} ^ { \lfloor n / d \rfloor } \displaystyle\sum_{j = \lfloor (id) ^ 3 / d \rfloor} ^ { \lfloor \left[ \left( id + 1 \right) ^ 3 - 1 \right] / d \rfloor } \left[ gcd\left( i, j \right) = 1 \right] \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{i = 1} ^ { \lfloor n / d \rfloor } \displaystyle\sum_{j = \lfloor (id) ^ 3 / d \rfloor} ^ { \lfloor \left[ \left( id + 1 \right) ^ 3 - 1 \right] / d \rfloor } \displaystyle\sum_{t | i, t | j} \mu(t) \\ & = \displaystyle\sum_{d = 1} ^ {n} d \displaystyle\sum_{t = 1} ^ { \lfloor n / d \rfloor } \mu(t) \left( \displaystyle\sum_{i = 1} ^ { \lfloor n / dt \rfloor } \displaystyle\sum_{j = \lfloor (idt) ^ 3 / dt \rfloor} ^ { \lfloor \left[ \left( idt + 1 \right) ^ 3 - 1 \right] / dt \rfloor } \right) \\ \end{aligned}
接下来老方法,令 T = d t T = dt
f ( n ) = T = 1 n ( i = 1 n / T j = ( i T ) 3 / T [ ( i T + 1 ) 3 1 ] / T ) t T μ ( t ) ( T t ) = T = 1 n ( i = 1 n / T j = ( i T ) 3 / T [ ( i T + 1 ) 3 1 ] / T ) φ ( T ) \begin{aligned} f\left( n \right) & = \displaystyle\sum_{T = 1} ^ {n} \left( \displaystyle\sum_{i = 1} ^ { \lfloor n / T \rfloor } \displaystyle\sum_{j = \lfloor (iT) ^ 3 / T \rfloor} ^ { \lfloor \left[ \left( iT + 1 \right) ^ 3 - 1 \right] / T \rfloor } \right) \displaystyle\sum_{t | T} \mu(t) \left( \frac{T}{t} \right) \\ & = \displaystyle\sum_{T = 1} ^ {n} \left( \displaystyle\sum_{i = 1} ^ { \lfloor n / T \rfloor } \displaystyle\sum_{j = \lfloor (iT) ^ 3 / T \rfloor} ^ { \lfloor \left[ \left( iT + 1 \right) ^ 3 - 1 \right] / T \rfloor } \right) \varphi(T) \\ \end{aligned}
再看括号里面的部分
g ( n , T ) = i = 1 n / T j = ( i T ) 3 / T [ ( i T + 1 ) 3 1 ] / T = i = 1 n / T ( ( i T + 1 ) 3 1 T ( i T ) 3 T + 1 ) = i = 1 n / T ( ( i T + 1 ) 3 ( i T ) 3 1 T + 1 ) = i = 1 n / T ( 3 i 2 T + 3 i + 1 ) = 3 T i = 1 n / T i 2 + 3 i = 1 n / T i + n / T \begin{aligned} g (n, T) & = \displaystyle\sum_{i = 1} ^ { \lfloor n / T \rfloor } \displaystyle\sum_{j = \lfloor (iT) ^ 3 / T \rfloor} ^ { \lfloor \left[ \left( iT + 1 \right) ^ 3 - 1 \right] / T \rfloor } \\ & = \displaystyle\sum_{i = 1} ^ { \lfloor n / T \rfloor } \left( \lfloor \frac{ \left( iT + 1 \right) ^ 3 - 1 }{T} \rfloor - \lfloor \frac{ (iT) ^ 3 }{T} \rfloor + 1 \right) \\ & = \displaystyle\sum_{i = 1} ^ { \lfloor n / T \rfloor } \left( \lfloor \frac{ \left( iT + 1 \right) ^ 3 - (iT) ^ 3 - 1 }{T} \rfloor + 1 \right) \\ & = \displaystyle\sum_{i = 1} ^ { \lfloor n / T \rfloor } \left( 3 i ^ 2 T + 3 i + 1 \right) \\ & = 3 T \displaystyle\sum_{i = 1} ^ { \lfloor n / T \rfloor } i ^ 2 + 3\displaystyle\sum_{i = 1} ^ { \lfloor n / T \rfloor } i + \lfloor n / T \rfloor \end{aligned}
可以预处理前缀和后 O ( 1 ) O(1) 得到
那么 f ( n ) = T = 1 n g ( n , T ) φ ( T ) f\left( n \right) = \displaystyle\sum_{T = 1} ^ {n} g \left(n, T \right) \varphi(T) ,就可以 O ( n ) O(n) 得到

最后来看原式的后半部分 j = n 3 N g c d ( n , j ) \displaystyle\sum_{j = n ^ 3} ^ {N} gcd(n, j)
i = n 3 N g c d ( n , i ) = d n d i = n 3 / d N / d [ g c d ( n d , j ) = 1 ] = d n d i = n 3 / d N / d t n d , t i μ ( t ) = d n d t d n μ ( t ) ( i = n 3 / d t N / d t ) T = d t = T n ( i = n 3 / T N / T ) d T μ ( T d ) d = T n ( i = n 3 / T N / T ) φ ( T ) = T n ( N / T n 3 / T + 1 ) φ ( T ) \begin{aligned} \displaystyle\sum_{i = n ^ 3} ^ {N} gcd(n, i) & = \displaystyle\sum_{d | n} d \displaystyle\sum_{i = \lfloor n ^ 3 / d \rfloor} ^ { \lfloor N / d \rfloor } \left[ gcd\left( \frac{n}{d}, j \right) = 1 \right] \\ & = \displaystyle\sum_{d | n} d \displaystyle\sum_{i = \lfloor n ^ 3 / d \rfloor} ^ { \lfloor N / d \rfloor } \displaystyle\sum_{ t | \frac{n}{d}, t | i } \mu(t) \\ & = \displaystyle\sum_{d | n} d \displaystyle\sum_{td | n} \mu(t) \left( \displaystyle\sum_{i = \lfloor n ^ 3 / dt \rfloor} ^ { \lfloor N / dt \rfloor } \right) \Leftarrow T = dt \\ & = \displaystyle\sum_{T | n} \left( \displaystyle\sum_{i = \lfloor n ^ 3 / T \rfloor} ^ { \lfloor N / T \rfloor } \right) \displaystyle\sum_{ d | T } \mu(\frac{T}{d}) d \\ & = \displaystyle\sum_{T | n} \left( \displaystyle\sum_{i = \lfloor n ^ 3 / T \rfloor} ^ { \lfloor N / T \rfloor } \right) \varphi(T) \\ & = \displaystyle\sum_{T | n} \left( \lfloor N / T \rfloor - \lfloor n ^ 3 / T \rfloor + 1 \right) \varphi(T) \\ \end{aligned}
于是我们后半部分可以 O ( n ) O\left(\sqrt n \right) 求得
总体复杂度就是 O ( n ) O\left( n \right)

AC代码

猜你喜欢

转载自blog.csdn.net/weixin_44282912/article/details/105417215
今日推荐