zoukankan      html  css  js  c++  java
  • 莫比乌斯反演

    前置知识

    留个坑以后再填

    公式

    形式1:
    (;F(n) = sumlimits_{d|n}f(d))
    (;f(n) = sumlimits_{d|n}mu(d)F(frac{n}{d}))
    (;)证明:(f(n) = sumlimits_{d|n}mu(d)F(frac{n}{d}) = sumlimits_{d|n}mu(d)sumlimits_{k|frac{n}{d}}f(k) = sumlimits_{k|n}f(k)sumlimits_{d|frac{n}{k}}mu(d) = sumlimits_{k|n}f(k)[n=k] = f(n))
    (;)这里用到了(sumlimits_{d|n}mu(d) = [n=1])

    形式2:
    (;F(n) = sumlimits_{n|d}f(d))
    (;f(n) = sumlimits_{n|d}mu(frac{n}{d})F(d))
    (;)证明同理
    (;)这是较常用的公式

    应用

    题目 : 给出(n, m, k), 求满足(x leq n, y leq m, gcd(x, y) = k)((x, y))的个数
    (f(k) = sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i, j) = k]), 即答案就是(f(k))
    但是(f(k))很难直接求出, 于是我们可以设(F(k) = sumlimits_{i=1}^nsumlimits_{j=1}^m[k|gcd(i, j)])
    由小学奥数知(F(k) = lfloorfrac{n}{k} floorlfloorfrac{m}{k} floor), 同时显然(F(k) = sumlimits_{k|d}f(d))
    于是我们可以套用上面的公式(()所以说形式2是较常用的公式())
    得到(f(k) = sumlimits_{k|d}mu(frac{d}{k})F(d) = sumlimits_{k|d}mu(frac{d}{k})lfloorfrac{n}{d} floorlfloorfrac{m}{d} floor)
    于是我们可以愉快用数论分块了(()数论分块是什么?留个坑以后再解释())

    类似这题的方法很常用

  • 相关阅读:
    svg 画地图
    小议 localStorage
    .NET Core 的缓存篇之MemoryCache
    .NET Core Session的简单使用
    .NET Core 使用NLog日志记录
    .NET Core 技巧汇总篇
    .NET Core 获取自定义配置文件信息
    微信支付教程系列之公众号支付
    微信支付教程系列之扫码支付
    微信支付教程系列之现金红包
  • 原文地址:https://www.cnblogs.com/2016gdgzoi509/p/11186350.html
Copyright © 2011-2022 走看看