Luogu P3327 [SDOI2015]约数个数和/BZOJ 4176 Lucas的数论

版权声明:转载注明出处,部分带(坑)文章谢绝转载。 https://blog.csdn.net/linjiayang2016/article/details/85260968

题目大意

共有 T T 组数据,给定 n , m n,m ,设 d ( x ) = i x 1 d(x)=\sum_{i|x}1 ,求 i = 1 n j = 1 m d ( i j ) \sum_{i=1}^n\sum_{j=1}^md(ij)

数据范围  T = 1 ( ) , 1 n = m ( ) 1 0 9 T=1(不输入),1\leqslant n=m(不输入)\leqslant 10^9  或  1 n , m , T 50000 1\leqslant n,m,T\leqslant 50000

题解

由于两道题目有一定不同,这里考虑最大范围,但不管如何,先来证证证……


结论  d ( i j ) = x i y j [ ( x , y ) = 1 ] \begin{aligned}d(ij)=\sum_{x|i}\sum_{y|j}[(x,y)=1]\end{aligned}

证明 对于 i j ij ,其唯一分解为 i j = d = 1 n p d k d ij=\prod\limits_{d=1}^np_d^{k_d} ,则 d ( i j ) = d = 1 n ( k d + 1 ) d(ij)=\prod\limits_{d=1}^n(k_d+1)
考虑一个质数 p p d ( i , j ) d(i,j) 的贡献,设 i = k p t 1 , j = q p t 2 i=k*p*t_1,j=q*p*t_2 ,则对 d ( i j ) d(ij) 得贡献为 k + q + 1 k+q+1 (约数个数 + 1 +1 的乘积)。
再来看一个引理


引理 设 i = k p t 1 , j = q p t 2 i=k*p*t_1,j=q*p*t_2 ,则有: x = 0 k y = 0 q [ ( p x , p y ) = 1 ] = q + k + 1 \sum\limits_{x=0}^k\sum\limits_{y=0}^q[(p^x,p^y)=1]=q+k+1
证明 可以发现,当且仅当 x y = 0 xy=0 时, ( p x , p y ) = 1 (p^x,p^y)=1 ,故成立。


因此对质数 p p d ( i , j ) d(i,j) 的贡献的贡献为 x = 0 k y = 0 q [ ( p x , p y ) = 1 ] \sum\limits_{x=0}^k\sum\limits_{y=0}^q[(p^x,p^y)=1]
接下来设 i = i = 1 n p i k i , j = i = 1 n p i q i i=\prod_{i=1}^n\limits p_i^{k_i},j=\prod_{i=1}^n\limits p_i^{q_i} ,考虑下面逐一每一个质数 p i p_i ,根据乘法原理得:
d ( i j ) = x 1 = 0 k 1 y 1 = 0 q 1 [ ( p 1 x 1 , p 1 y 1 ) = 1 ] x 2 = 0 k 2 y 2 = 0 q 2 [ ( p 2 x 2 , p 2 y 2 ) = 1 ] . . . x n = 0 k n y n = 0 q n [ ( p n x n , p n y n ) = 1 ] d(ij)=\sum_{x_1=0}^{k_1}\sum_{y_1=0}^{q_1}[(p_1^{x_1},p_1^{y_1})=1]\sum_{x_2=0}^{k_2}\sum_{y_2=0}^{q_2}[(p_2^{x_2},p_2^{y_2})=1]...\sum_{x_n=0}^{k_n}\sum_{y_n=0}^{q_n}[(p_n^{x_n},p_n^{y_n})=1]

d ( i , j ) = d = 1 n x d = 0 k d y d = 0 q d [ ( p d x d , p d y d ) = 1 ] d(i,j)=\sum_{d=1}^n\sum_{x_d=0}^{k_d}\sum_{y_d=0}^{q_d}[(p_d^{x_d},p_d^{y_d})=1]

x = i = 1 n p i k i , y = i = 1 n p i k i x=\prod_{i=1}^n\limits p_i^{k_i},y=\prod_{i=1}^n\limits p_i^{k_i} ,则答案为 x i y j [ ( x , y ) = 1 ] \sum_{x|i}\sum_{y|j}[(x,y)=1]


代入题目,得:
i = 1 n j = 1 m d ( i j ) = i = 1 n j = 1 m x i y j [ ( x , y ) = 1 ] = i = 1 n j = 1 m x i y j d ( x , y ) μ ( d ) \begin{aligned} \sum_{i=1}^n\sum_{j=1}^md(ij)&=\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}[(x,y)=1]\\ &=\sum_{i=1}^n\sum_{j=1}^m\sum_{x|i}\sum_{y|j}\sum_{d|(x,y)}\mu(d)\\ \end{aligned}

各回各家,各找各妈,好好理解,实在不行用C++证明法。
= d = 1 min ( n , m ) μ ( d ) ( d x x n x i i n 1 ) ( d y y m y j i m 1 ) = d = 1 min ( n , m ) μ ( d ) ( d x x n n x ) ( d y y m m y ) = d = 1 min ( n , m ) μ ( d ) ( x = 1 n d n d x ) ( y = 1 m d m d y ) = d = 1 min ( n , m ) μ ( d ) ( x = 1 n d n d x ) ( y = 1 m d m d y ) \begin{aligned} 原式&=\sum_{d=1}^{\min(n,m)}\mu(d)\Bigg(\sum_{d|x}^{x\leqslant n}\sum_{x|i}^{i\leqslant n}1\Bigg)\Bigg(\sum_{d|y}^{y\leqslant m}\sum_{y|j}^{i\leqslant m}1\Bigg)\\ &=\sum_{d=1}^{\min(n,m)}\mu(d)\Bigg(\sum_{d|x}^{x\leqslant n}\Big\lfloor\frac nx\Big\rfloor\Bigg)\Bigg(\sum_{d|y}^{y\leqslant m}\Big\lfloor\frac my\Big\rfloor\Bigg)\\ &=\sum_{d=1}^{\min(n,m)}\mu(d)\Bigg(\sum_{x=1}^{\large\lfloor\frac nd\rfloor}\Big\lfloor\frac n{dx}\Big\rfloor\Bigg)\Bigg(\sum_{y=1}^{\large\lfloor\frac md\rfloor}\Big\lfloor\frac m{dy}\Big\rfloor\Bigg)\\ &=\sum_{d=1}^{\min(n,m)}\mu(d)\Bigg(\sum_{x=1}^{\large\lfloor\frac nd\rfloor}\Big\lfloor\frac {\large\lfloor\frac nd\rfloor}{x}\Big\rfloor\Bigg)\Bigg(\sum_{y=1}^{\large\lfloor\frac md\rfloor}\Big\lfloor\frac {\large\lfloor\frac md\rfloor}{y}\Big\rfloor\Bigg) \end{aligned}

Luogu

Θ ( n n ) \Theta(n\sqrt n) 预处理出 f ( x ) = i = 1 n n i f(x)=\sum_{i=1}^n\lfloor\frac ni\rfloor ,线筛出 μ \mu 即可。

BZOJ

BZOJ 要求设计非线性算法,因而 μ \mu 的前缀和需要用杜教筛求出,而且不能再直接 Θ ( n n ) \Theta(n\sqrt n) 预处理,必须追求更低的时间复杂度。
由于 n = m n=m ,有:
d = 1 min ( n , m ) μ ( d ) ( x = 1 n d n d x ) ( y = 1 m d m d y ) = d = 1 min ( n , m ) μ ( d ) ( x = 1 n d n d x ) 2 \sum_{d=1}^{\min(n,m)}\mu(d)\Bigg(\sum_{x=1}^{\large\lfloor\frac nd\rfloor}\Big\lfloor\frac {\large\lfloor\frac nd\rfloor}{x}\Big\rfloor\Bigg)\Bigg(\sum_{y=1}^{\large\lfloor\frac md\rfloor}\Big\lfloor\frac {\large\lfloor\frac md\rfloor}{y}\Big\rfloor\Bigg)=\sum_{d=1}^{\min(n,m)}\mu(d)\Bigg(\sum_{x=1}^{\large\lfloor\frac nd\rfloor}\Big\lfloor\frac {\large\lfloor\frac nd\rfloor}{x}\Big\rfloor\Bigg)^2

右边那堆可以在除法分块的同时完成。

猜你喜欢

转载自blog.csdn.net/linjiayang2016/article/details/85260968