前面的讲解【Blog地址】
题目意思:求
∑
i
=
1
n
∑
j
=
1
m
l
c
m
(
i
,
j
)
\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)
i=1∑nj=1∑mlcm(i,j)
对于数据范围
n
,
m
≤
1
0
10
n,m\leq 10^{10}
n,m≤1010。
其实我们前面将式子化简成了:
= ∑ d = 1 n d ∑ w = 1 ⌊ n d ⌋ μ ( w ) w 2 S ( ⌊ n d w ⌋ ) S ( ⌊ n d w ⌋ ) =\sum_{d=1}^nd\sum_{w=1}^{\lfloor\frac{n}{d}\rfloor}\mu(w)w^2S(\left\lfloor\frac{n}{dw}\right\rfloor)S(\left\lfloor\frac{n}{dw}\right\rfloor) =d=1∑ndw=1∑⌊dn⌋μ(w)w2S(⌊dwn⌋)S(⌊dwn⌋)
其中 S ( n ) = n × ( n + 1 ) 2 S(n)=\frac{n\times(n+1)}{2} S(n)=2n×(n+1)
其实这个时候我们用杜教筛筛 ∑ i = 1 n μ ( i ) i 2 \sum_{i=1}^n\mu(i)i^2 ∑i=1nμ(i)i2即可在 O ( n 3 4 ) O(n^{\frac{3}{4}}) O(n43)时间内做出(分块套分块再加杜教筛)。
对于 f ( x ) = μ ( x ) x 2 f(x)=\mu(x)x^2 f(x)=μ(x)x2的前缀和 F ( n ) F(n) F(n),我们可以根据杜教筛的套路,令 g ( x ) = x 2 g(x)=x^2 g(x)=x2,那么 h = f ⨂ g h=f\bigotimes g h=f⨂g就等于( ⨂ \bigotimes ⨂为狄利克雷卷积):
= ∑ d ∣ n μ ( d ) d 2 ( n d ) 2 = n 2 ∑ d ∣ n μ ( d ) = n 2 [ n = 1 ] = [ n = 1 ] =\sum_{d|n}\mu(d)d^2\left(\frac{n}{d}\right)^2\\ =n^2\sum_{d|n}\mu(d)\\ =n^2[n=1]\\ =[n=1] =d∣n∑μ(d)d2(dn)2=n2d∣n∑μ(d)=n2[n=1]=[n=1]
此时带入杜教筛公式即可得,其中后面要除以 g ( 1 ) g(1) g(1),但因为 g ( 1 ) = 1 g(1)=1 g(1)=1这里略去:
F ( n ) = ∑ i = 1 n h ( i ) − ∑ i = 2 n g ( i ) F ( ⌊ n i ⌋ ) = 1 − ∑ i = 2 n i 2 F ( ⌊ n i ⌋ ) F(n)=\sum_{i=1}^nh(i)-\sum_{i=2}^ng(i)F(\left\lfloor\frac{n}{i}\right\rfloor)\\ =1-\sum_{i=2}^ni^2F(\left\lfloor\frac{n}{i}\right\rfloor) F(n)=i=1∑nh(i)−i=2∑ng(i)F(⌊in⌋)=1−i=2∑ni2F(⌊in⌋)
就可以直接递归筛了。
但是我们可以继续看,转而枚举乘积 d w dw dw,令 T = d w T=dw T=dw则可以得到原式等于:
= ∑ T = 1 n S ( ⌊ n T ⌋ ) S ( ⌊ m T ⌋ ) ∑ d ∣ T n μ ( d ) d 2 ( T d ) = ∑ T = 1 n S ( ⌊ n T ⌋ ) S ( ⌊ m T ⌋ ) T ∑ d ∣ T μ ( d ) d =\sum_{T=1}^nS(\left\lfloor\frac{n}{T}\right\rfloor)S(\left\lfloor\frac{m}{T}\right\rfloor)\sum_{d|T}^n\mu(d)d^2\left(\frac{T}{d}\right)\\ =\sum_{T=1}^nS(\left\lfloor\frac{n}{T}\right\rfloor)S(\left\lfloor\frac{m}{T}\right\rfloor)T\sum_{d|T}\mu(d)d\\ =T=1∑nS(⌊Tn⌋)S(⌊Tm⌋)d∣T∑nμ(d)d2(dT)=T=1∑nS(⌊Tn⌋)S(⌊Tm⌋)Td∣T∑μ(d)d
那么我们只需要杜教筛出后面 T ∑ d ∣ T μ ( d ) d T\sum_{d|T}\mu(d)d T∑d∣Tμ(d)d即可分块加杜教筛,在 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)的时间内做出。
但是如何筛后面的那个呢?
我们来看,现在相当于求这个式子:
∑ d = 1 n d ∑ w ∣ d μ ( w ) w \sum_{d=1}^nd\sum_{w|d}\mu(w)w d=1∑ndw∣d∑μ(w)w
由于前面的式子和现在这个求出来的值是一样的,也就是:
∑ d = 1 n d ∑ w = 1 ⌊ n d ⌋ μ ( w ) w 2 S ( ⌊ n d w ⌋ ) S ( ⌊ n d w ⌋ ) = ∑ T = 1 n S ( ⌊ n T ⌋ ) S ( ⌊ m T ⌋ ) T ∑ d ∣ T μ ( d ) d \sum_{d=1}^nd\sum_{w=1}^{\lfloor\frac{n}{d}\rfloor}\mu(w)w^2S(\left\lfloor\frac{n}{dw}\right\rfloor)S(\left\lfloor\frac{n}{dw}\right\rfloor)=\sum_{T=1}^nS(\left\lfloor\frac{n}{T}\right\rfloor)S(\left\lfloor\frac{m}{T}\right\rfloor)T\sum_{d|T}\mu(d)d d=1∑ndw=1∑⌊dn⌋μ(w)w2S(⌊dwn⌋)S(⌊dwn⌋)=T=1∑nS(⌊Tn⌋)S(⌊Tm⌋)Td∣T∑μ(d)d
所以我们可以将 S S S相同的部分减去,那么剩下就是:
∑ d = 1 n d ∑ w = 1 ⌊ n d ⌋ μ ( w ) w 2 = ∑ T = 1 n T ∑ d ∣ T μ ( d ) d \sum_{d=1}^nd\sum_{w=1}^{\lfloor\frac{n}{d}\rfloor}\mu(w)w^2=\sum_{T=1}^nT\sum_{d|T}\mu(d)d d=1∑ndw=1∑⌊dn⌋μ(w)w2=T=1∑nTd∣T∑μ(d)d
所以相当于筛前面的那个东西,我们预处理线性筛出一部分 ∑ T = 1 n T ∑ d ∣ T μ ( d ) d \sum_{T=1}^nT\sum_{d|T}\mu(d)d ∑T=1nT∑d∣Tμ(d)d的这个,然后用杜教筛加分块继续求前面的那个即可。
另外一种解释:
相当于我们后面需要杜教筛的 d ∑ w ∣ d μ ( w ) w = ∑ w ∣ d μ ( w ) w 2 d w d\sum_{w|d}\mu(w)w=\sum_{w|d}\mu(w)w^2\frac{d}{w} d∑w∣dμ(w)w=∑w∣dμ(w)w2wd
写成狄利克雷卷积的形式就是 ( i d 2 ⋅ μ ) ⨂ i d (id^2\cdot\mu)\bigotimes id (id2⋅μ)⨂id,我们令 f = ( i d 2 ⋅ μ ) ⨂ i d , g = i d 2 f=(id^2\cdot\mu)\bigotimes id,g=id^2 f=(id2⋅μ)⨂id,g=id2,那么 f ⨂ g = ( i d 2 ⋅ μ ) ⨂ i d ⨂ i d 2 f\bigotimes g=(id^2\cdot\mu)\bigotimes id\bigotimes id^2 f⨂g=(id2⋅μ)⨂id⨂id2,交换一下就是 ( i d 2 ⋅ μ ) ⨂ i d 2 ⨂ i d (id^2\cdot\mu)\bigotimes id^2\bigotimes id (id2⋅μ)⨂id2⨂id,前两个卷出来就是 ϵ \epsilon ϵ,然后原式就变成 ϵ ⨂ i d = i d \epsilon\bigotimes id=id ϵ⨂id=id,然后杜教筛即可。
公式即为:
F ( n ) = ∑ i = 1 n i − ∑ i = 2 n i 2 F ( ⌊ n i ⌋ ) F(n)=\sum_{i=1}^ni-\sum_{i=2}^ni^2F(\lfloor\frac{n}{i}\rfloor) F(n)=i=1∑ni−i=2∑ni2F(⌊in⌋)
我觉得上面这种更好
代码,咕咕咕
参考资料博客: