• 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 ]

    代码就很简单了吧

  • 相关阅读:
    散点图增加趋势线
    asp.net自动刷新获取数据
    jQuery在asp.net中实现图片自动滚动
    tornado 学习笔记一:模板
    node.js 学习笔记二:创建属于自己的模块
    mysql 5.6 innodb memcache 操作学习一
    unicode,str
    node.js 学习笔记四:读取文件
    gevent 学习笔记一
    while 循环居然可以用else
  • 原文地址:https://www.cnblogs.com/Hs-black/p/13058950.html
Copyright © 2020-2023  润新知