题意
一个多重集 (S),有 (m) 种不同的数,第 (i) 种数为 (a_i),有 (freq_i) 个。
求满足如下条件的和式 (sum_{xin A}sum_{yin B}xy) 的值:
- (Bsubset A)
- (|B|=|A|-1)
- (gcd_{xin A}{x}=1)
注意,其中 (A,B) 也为多重集。
( exttt{Data Range:}a_i,mleq10^5,freq_ileq10^9)
分析
设 (g_i) 为 (gcd_{xin A}{x}=i) 的答案,那么最终所求为 (g_1)。
但是直接求不太方便,我们用一个套路 ( ext{trick}),设 (f_i) 为 (sum_{i|j} g_j) 的值。那么通过 ( ext{Mobius}) 反演可以得到 (g_1=sum_{i} f_imu(i))。于是我们现在只需要求出 (gcd_{xin A}) 是 (i) 的倍数的答案。
枚举 (i) ,对于 (gcd) 是 (i) 的倍数的数分类。设 (i) 的倍数构成的集合为 (S_i)。计算同一类中的贡献,设在和式中 (A) 取出的是 (x),(B) 取出的是 (y),有:
-
当 (x,y) 是 同一个数 时,贡献式为:
[x^2 imes(|S_i|-1) imes2^{|S_i|-2} imes freq_x ] -
当 (x,y) 具有相同数值但 并不是同一个数 时,贡献式为:
[x^2 imesleft((|S_i|-2) imes2^{|S_i|-3}+2^{|S_i|-2} ight) imes C_{freq_i}^2 ] -
当 (x,y) 数值不同 时:
[xy imesleft((|S_i|-2) imes2^{|S_i|-3}+2^{|S_i|-2} ight) imes freq_x imes freq_y ]
通过枚举哪一个数在 (B) 中不被包含来包含所有情况,非常巧妙。
对于第三个柿子,我们不可能枚举所有 (x,y)。因此需要另辟蹊径。发现提取无关项出来后,一个前缀和就可以解决了。
枚举数值使用调和级数的 ( ext{trick}) 即可。总时间复杂度为 (O(n ln n+nlog_2 (sum_i freq_i)))。