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

    代码就很简单了吧

  • 相关阅读:
    23种设计模式目录总览
    Unity3d优化总结2
    Unity3d优化总结1
    Unity四元数和旋转
    浅谈Unity中的GC以及优化
    Unity自带寻路Navmesh
    High-level NavMesh Building Components
    Unity3D的四种坐标系
    安装SQLserver2008r2出现 试图执行未经授权的操作
    C#获取上传文件的扩展名
  • 原文地址:https://www.cnblogs.com/Hs-black/p/13058950.html
Copyright © 2020-2023  润新知