zoukankan      html  css  js  c++  java
  • 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 ]

    代码就很简单了吧

  • 相关阅读:
    js-数组的原型拓展
    java-单例模式的java连接池
    java-基本数据类型值范围
    rabbitmq
    从哪跌倒从哪爬起,千里之行始于足下
    create python project steps
    常用代码片段
    shell脚本常用(记)
    shell学习
    maven工具使用
  • 原文地址:https://www.cnblogs.com/Hs-black/p/13058950.html
Copyright © 2011-2022 走看看