2021牛客暑期多校训练营 J. Product of GCDs 不动脑子的莫比乌斯反演做法(
Posted 繁凡さん
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021牛客暑期多校训练营 J. Product of GCDs 不动脑子的莫比乌斯反演做法(相关的知识,希望对你有一定的参考价值。
整理的算法模板合集: ACM模板
实际上是一个全新的精炼模板整合计划
Weblink
https://ac.nowcoder.com/acm/contest/11253/J
Problem
t t t 组数据
给定一个集合 S,在 S 中找出元素个数为 k k k 的子集合 T ,计算 T 中所有元素的 gcd \\gcd gcd,将所有的 T 得到的 gcd \\gcd gcd 乘在一起得到结果,结果对 P 取模。
t ≤ 60 , 1 0 6 ≤ P ≤ 1 0 14 , 1 ≤ x i ≤ 8 ⋅ 1 0 4 , 1 ≤ ∣ S ∣ ≤ 40000 , 1 ≤ k ≤ min ( ∣ S ∣ , 30 ) t\\leq 60,10^6\\leq P\\leq 10^{14},1\\leq x_i\\leq 8\\cdot 10^4,1\\leq|S|\\leq 40000,1\\leq k\\leq \\min(|S|,30) t≤60,106≤P≤1014,1≤xi≤8⋅104,1≤∣S∣≤40000,1≤k≤min(∣S∣,30)
Solution
统计 gcd \\gcd gcd 的乘积,显然无法正面去做,显然考虑从贡献的角度出发,枚举 gcd \\gcd gcd,我们只需要计算每个 gcd \\gcd gcd 出现多少次,乘起来就是答案。
显然一个集合 T T T 的 gcd = d \\gcd=d gcd=d,则集合 T T T 中元素均为 d d d 的倍数,且倍数互质。
因此我们可以倍数法 O ( n log n ) O(n\\log n) O(nlogn) 预处理 f [ i ] f[i] f[i] 表示集合 S S S 中 i i i 的倍数的数的个数。
显然从质因子出发容斥计算即可。
不动脑子的莫比乌斯反演做法:
∑ d = 1 max { x i } d ∑ T ∈ S [ gcd ( T 1 d , T 2 d , ⋯ , T k d ) = 1 ] ( m o d p ) = ∑ d = 1 max { x i } d ∑ T ∈ S ∑ i ∣ gcd ( T 1 d , ⋯ , T k d ) μ ( i ) ( m o d p ) = ∑ d = 1 max { x i } d ∑ T ∈ S ∑ i = 1 ⌊ max { x i } d ⌋ μ ( i ) [ i ∣ T 1 d ] [ i ∣ T 2 d ] ⋯ [ i ∣ T k d ] ( m o d p ) = ∑ d = 1 max { x i } d ∑ i = 1 ⌊ max { x i } d ⌋ μ ( i ) ( f [ i × d ] k ) ( m o d p ) = ∑ d = 1 max { x i } d ∑ i = 1 ⌊ max { x i } d ⌋ μ ( i ) ( f [ i × d ] k ) ( m o d φ ( p ) ) ( m o d p ) \\begin{aligned}&\\ \\ \\ \\ \\ \\displaystyle \\sum_{d = 1}^{\\max\\{x_i\\}}d^{\\ \\ \\displaystyle \\sum_{T\\in S}[\\gcd(\\frac {T_1} d,\\frac {T_2} d,\\cdots,\\frac {T_k} d)=1]}\\pmod p&\\\\&=\\displaystyle \\sum_{d = 1}^{\\max\\{x_i\\}}d^{\\ \\ \\displaystyle \\sum_{T\\in S}\\sum_{i\\mid \\gcd(\\frac {T_1} d,\\cdots,\\frac {T_k} d)} \\mu(i) }\\pmod p&\\\\&=\\displaystyle \\sum_{d = 1}^{\\max\\{x_i\\}}d^{\\ \\ \\displaystyle \\sum_{T\\in S}\\sum_{i=1}^{\\left\\lfloor\\frac {\\max\\{x_i\\}} d\\right\\rfloor}\\mu(i) [i\\mid \\frac {T_1} d][i\\mid \\frac {T_2} d]\\cdots [i\\mid \\frac {T_k} d]}\\pmod p&\\\\&=\\displaystyle \\sum_{d = 1}^{\\max\\{x_i\\}}d^{\\ \\ \\displaystyle \\sum_{i=1}^{\\left\\lfloor\\frac {\\max\\{x_i\\}} d\\right\\rfloor}\\mu(i) {f[i\\times d] \\choose k}}\\pmod p&\\\\&=\\displaystyle \\sum_{d = 1}^{\\max\\{x_i\\}}d^{\\ \\ \\displaystyle \\sum_{i=1}^{\\left\\lfloor\\frac {\\max\\{x_i\\}} d\\right\\rfloor}\\mu(i) {f[i\\times d] \\choose k}\\pmod {\\varphi(p)}}\\pmod p\\end{aligned} d=1∑max{xi}d T∈S∑[gcd(dT1,dT2,⋯,dTk)=1](modp)=d=1∑max{xi}d T∈S∑i∣gcd(dT1,⋯,dTk)∑μ(i)(modp)=d=1∑max{xi}d T∈S∑i=1∑⌊dmax{xi}⌋μ(i)[i∣dT1][i∣dT2]⋯[i∣2021牛客暑期多校训练营2——Product of GCDs