1. 程式人生 > >51Nod1238最小公倍數之和V3的另一種做法

51Nod1238最小公倍數之和V3的另一種做法

前面的講解【Blog地址


題目意思:求
i = 1 n

j = 1 m l c m (
i , j ) \sum_{i=1}^n\sum_{j=1}^mlcm(i,j)
對於資料範圍 n ,
m 1 0 10 n,m\leq 10^{10}


其實我們前面將式子化簡成了:

= 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)

其中 S ( n ) = n × ( n + 1 ) 2 S(n)=\frac{n\times(n+1)}{2}

其實這個時候我們用杜教篩篩 i = 1 n μ ( i ) i 2 \sum_{i=1}^n\mu(i)i^2 即可在 O ( n 3 4 ) O(n^{\frac{3}{4}}) 時間內做出(分塊套分塊再加杜教篩)。

對於 f ( x ) = μ ( x ) x 2 f(x)=\mu(x)x^2 的字首和 F ( n ) F(n) ,我們可以根據杜教篩的套路,令 g ( x ) = x 2 g(x)=x^2 ,那麼 h = f g h=f\bigotimes 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]

此時帶入杜教篩公式即可得,其中後面要除以 g ( 1 ) g(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)

就可以直接遞迴篩了。


但是我們可以繼續看,轉而列舉乘積 d w dw ,令 T = d w 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\\