zoukankan      html  css  js  c++  java
  • 【笔记】莫比乌斯反演

    过了这么久,今天来重温一下这个知识点 。

    前置芝士

    容斥函数((mu)):正版

    积性函数((phi)):经常用到

    正题

    三个等式

    [mu * I = epsilon ]

    [phi * I = id ]

    [mu * id = phi ]

    其中 (I(n) = 1)(id(n) = n)(epsilon(n) = left{ egin{array}{**lr**} 1, ~~n = 1 \ 0, ~~n ot= 1 end{array} ight.)

    [epsilon(n) = sum_{d mid n}mu(d) * I(frac{n}{d}) = sum_{d mid n}mu(d) ]

    [id(n) = sum_{d mid n}phi(d) * I(frac{n}{d}) = sum_{d mid n}phi(d) = n ]

    [phi(n) = sum_{d mid n}mu(d) * id(frac{n}{d}) ]

    满足交换律,结合律,分配率 。

    经典问题

    问题 1

    给定 (N)(M),求

    [sum^{N}_{i = 1} sum^{M}_{j = 1} ext{gcd}(i, ~j) ]

    解法(推式子)

    [sum^{N}_{i = 1} sum^{M}_{j = 1} ext{gcd}(i, ~j) ]

    1. 变形

    [sum^{N}_{i = 1} sum^{M}_{j = 1} id[ ext{gcd}(i, ~j)] ]

    1. 增加枚举变量

    [sum^{N}_{i = 1} sum^{M}_{j = 1} sum_{d mid ext{gcd}(i, ~j)} phi(d) ]

    1. 交换枚举顺序

    [sum^{ ext{min}(N, ~M)}_{d = 1} sum^{lfloor frac{N}{d} floor}_{i = 1} sum^{lfloor frac{M}{d} floor}_{j = 1} phi(d) ]

    • (d)(i, ~j)( ext{gcd}) 的因子,因此 (d) 也是 (i, ~j) 的因子,(i, ~j)(d) 的倍数 。因为 ( ext{gcd}(i, ~j)) 的最大值为 ( ext{min}(i, ~j)),所以 (d) 的最大值为 ( ext{min}(i, ~j))

    • (d) 提前后,(i, ~j) 的枚举意义不再是枚举数字的值,而是枚举 (d) 出现的次数,即原数字 (i, ~j)(d) 的倍数的次数,因此 (N, ~M)(d) 并向下取整 。

    1. 删除无用变量

    [sum^{ ext{min}(N, ~M)}_{d = 1} lfloor frac{N}{d} floor lfloor frac{M}{d} floor phi(d) ]

    接下来用筛法求 (phi) 就好了 。

    问题 2

    给定 (N)(M)(K),求

    [sum^{N}_{i = 1} sum^{M}_{j = 1} ext{gcd}(i, ~j) = K ]

    解法

    [sum^{N}_{i = 1} sum^{M}_{j = 1} ext{gcd}(i, ~j) = K ]

    先变形

    [sum^{frac{N}{K}}_{i = 1} sum^{frac{M}{K}}_{j = 1} ext{gcd}(i, ~j) = 1 ]

    众所周知,两个数同时除去它们的 ( ext{gcd}) 后,剩下的两个数互质,因此令 (N, ~M)(K),求 (i, ~j) 的互质对数 。

    接下来再变形

    [sum^{frac{N}{K}}_{i = 1} sum^{frac{M}{K}}_{j = 1} epsilon[ ext{gcd}(i, ~j)] ]

    剩下的步骤就与上一个问题步骤一样了 。

    最后

    莫反的题都比较板,就是有点费脑子与头发,不过这问题不大,可以自己到洛谷找题,反正裸题重题一大堆,都是经验哦

    祝您 RP++,AK NOI!!

  • 相关阅读:
    ImportError: FloatProgress not found. Please update jupyter and ipywidgets.问题
    运行jupyter notebook显示ImportError: cannot import name 'secure_write',导致始终显示In[*]问题,服务器挂掉
    anaconda中jupyter notebook安装代码自动补全插件,报错“Exception: Jupyter command `jupyter-contrib` not found.”
    Hadoop集群(第7期)_Eclipse开发环境设置
    Hadoop集群(第6期)_WordCount运行详解
    Hadoop集群(第5期)_Hadoop安装配置
    Hadoop集群(第4期)_SecureCRT使用
    Hadoop集群(第3期)_VSFTP安装配置
    Hadoop(2)_机器信息分布表
    Hadoop(1)
  • 原文地址:https://www.cnblogs.com/EiffelA-blog/p/15086076.html
Copyright © 2011-2022 走看看