CF839D Winter is here

题目分析

显然我们不可能直接计算每一个子序列的贡献,而应该计算对于每一个gcd对答案的贡献。

考虑容斥。按照套路:

\(q(i)\)表示序列\(gcd\)\(i\)的倍数的序列长度和。

\(g(i)\)表示序列\(gcd\)\(i\)的序列对答案的贡献。

\(f(i)\)表示序列\(gcd\)\(i\)的序列的容斥系数。

对于\(q(i)\),显然我们可以利用调和级数在\(O(nlogn)\)的时间复杂度下求出\(gcd\)\(i\)的数的个数。
那么它们形成的子序列的长度和为:\(\sum\limits_{i=0}^ni*\dbinom{n}{i}=n* 2^{n-1}\)

对于\(g(i)\),本题中显然\(g(i)=i\)

对于\(f(i)\),我们按照套路可以得到:\(g(x)=\sum\limits_{d|x}f(d)\)
这个十分显然的可以直接上莫比乌斯反演。于是得到: \(f(x)=\sum\limits_{d|x}\mu(\frac{x}{d})g(d)\)
这个也很容易利用调和级数在\(O(nlogn)\)的时间复杂度下计算出来。

于是最终答案即为:\(\sum\limits_{i=2}^{10^6}q(i)* f(i)\)

posted @ 2018-11-18 15:32  Trrui  阅读(647)  评论(0编辑  收藏  举报