Loj6102. 「2017 山东二轮集训 Day1」第三题(min-max 反演)

Loj6102. 「2017 山东二轮集训 Day1」第三题(min-max 反演)

题目大意

输入一个大小为 (n) 的集合 (S),求 (lcm_{k∈S}f_k),其中 (f_k) 是第 (k) 个 Fibonacci 数。

数据范围

$ n le 5 cdot 10^4,k le 10^6$

解题思路

有人说是经典题,我觉得是神仙题

首先要有一些前置知识

  • 莫比乌斯反演
  • min-max 容斥
  • (gcd(f_i, f_j) = f_{gcd(i, j)})

首先一步 min-max 反演

[large lcm(f_S)=prod_{varnothing e Tsubseteq S}gcd(f_k)_{k in T}^{(-1)^{|T|-1}} ]

解释一下,将每个质因子分开考虑,它们可以分别 min-max 容斥,原来 min-max 的加法通过变成指数变成了乘法,各个质因子是独立的,因此可以一起计算

[large lcm(f_S)=prod_{varnothing e Tsubseteq S}f_{gcd(k)_{k in T}}^{(-1)^{|T|-1}} ]

这一步用了 (gcd(f_i, f_j) = f_{gcd(i, j)})

然后看到 gcd 就会想到反演(真能想到吗),设 (f_i = prod_{d|i} g_d),有 (g_i = f_iprod_{d|i and d eq i} g_d^{-1})

[large lcm(f_S)=prod_{varnothing e Tsubseteq S}{(prod_{d|gcd(k)}g_d})^{(-1)^{|T|-1}}\ large lcm(f_S) = prod_d g_d^{sum_{varnothing e Tsubseteq S_d}(-1)^{|T|-1}} ]

其中 (S_d = {x | x in S and d| x}) ,容易(真的容易吗)发现 (sum_{T subseteq S} (-1)^{|T|-1} = 0)

所以 (sum_{varnothing eq T subseteq S} (-1)^{|T|-1} = 1(|S| eq varnothing))

因此有

[large lcm(f_S)= prod_{exists k, d | k} g_d ]

代码就很简单了吧

原文地址:https://www.cnblogs.com/Hs-black/p/13058950.html