zoukankan      html  css  js  c++  java
  • 莫某某的反演

    莫某某的反演似乎有很多形式, 但不用太在意, 多关注常用的就行了。
    莫某某的反演可以直接用容斥证明, 但有一种 “证明方法” 更易令人信服(并记住), 下面会介绍这种 “证明方法”。

    数论函数及其加减数乘运算

    即定义域为正整数的函数。
    简单的例子:
    (epsilon(n) = [n=1])
    ( ext{1}(n) = 1)
    ( ext{id}_k(n) = n^k)
    (sigma_k(n) = sum_{d|n} d^k)

    加减法
    (( ext{f} pm ext{g})(n) = ext{f}(n) pm ext{g}(n))
    数乘
    (k) 为整数, ((x ext{f})(n) = x · ext{f}(n))

    数论函数的狄利克雷卷积运算及其性质

    定义两个数论函数的 狄利克雷卷积 运算(二元算符 (*))如下:
    ( ext{h} = ext{f} * ext{g}), 则:

    [ ext{h}(n) = sum_{d|n} ext{f}(d) ext{g}(frac{n}{d}) ]

    数论函数的狄利克雷卷积运算满足 交换律、结合律和对加法的分配律, 可以自己验证一下。
    (用狄利克雷卷积的另一种写法 (( ext{f}* ext{g})(n) = sum_{ij=n} ext{f}(i) ext{g}(j)) 会更容易验证)

    幺元(单位元)
    狄利克雷卷积的幺元为 (epsilon(n) = [n=1]), 即对任意数论函数 ( ext{t})( ext{t} * epsilon = ext{t})

    逆元
    对于每个 ( ext{f}(1) eq 0) 的数论函数 ( ext{f}), 都存在一个函数 ( ext{g}) 使得 ( ext{f} * ext{g} = epsilon)

    数论函数求逆(( ext{f}(1) eq 0)

    [ ext{g}(n) = frac{1}{ ext{f}(1)} Bigg( [n=1] - sum_{i|n, i eq 1} ext{f}(i) ext{g}(frac{n}{i}) Bigg) ]

    [( ext{f}* ext{g})(n) = sum_{i|n} ext{f}(i) ext{g}(frac{n}{i}) = ext{f}(1) ext{g}(n) + sum_{i|n, i eq 1} ext{f}(i) ext{g}(frac{n}{i}) = [n=1] ]

    积性函数及其性质

    满足 (m ot n)( ext f(nm) = ext f (n) ext f (m)) 的数论函数 ( ext f) 称为 积性函数, 若无需满足 (m ot n) 就有 ( ext f(nm) = ext f (n) ext f (m)), 那么 ( ext f) 被称为完全积性函数。

    完全积性函数的例子:
    (epsilon(n) = [n=1])
    ( ext{id}_k(n) = n^k)
    ( ext 1(n) = 1)

    积性函数的例子:
    (sigma_k(n) = sum_{d|n} d^k)
    (varphi(n) = sum_{i=1}^{n-1} [i ot n])

    性质1:两个积性函数的狄利克雷卷积仍然是积性函数

    [( ext f * ext g)(nm) = sum_{d|nm} ext f(d) ext g (frac{nm}{d}) = sum_{a|n,b|m} ext f(ab) ext g (frac{nm}{ab}) = sum_{a|n} ext f(a) ext g (frac{n}{a}) sum_{b|m} ext f(b) ext g (frac{m}{b}) = ( ext f * ext g)(n) ( ext f * ext g)(m) ]

    性质2:积性函数的逆是积性函数
    证明以后再说吧。

    莫比乌斯反演

    (mu * ext 1 = epsilon), 故

    [ ext f(n) = sum_{d|n} ext g(d) LeftarrowRightarrow ext g(n) = sum_{d|n} ext f(d) mu(frac{n}{d}) ]

    还有另一方向上的莫比乌斯反演, 在这不述。

    什么是 (mu)

    由于 ( ext 1) 是积性函数, 所以作为其逆的 (mu) 也是积性函数, 那么从参数 (p^k ;;(p in {prime}, k ge 0)) 开始:

    [( ext 1 * mu)(n) = [n=1] ]

    (( ext 1 * mu)(1) = mu(1) = [1=1] = 1), 故 (mu(1) = 1)
    (( ext 1 * mu)(p^1) = mu(1) + mu(p^1) = [p^1 = 1] = 0), 故 (mu(p_1) = -1)
    依着这个思路, 可得 (mu(p^2) = 0), 再用归纳法就可得 (mu(p^k) = 0 ;;(k>1))

    所以, 对于一般的 (n in N_+)

    [mu(n) = egin{cases} (-1)^k, ;; n = p_1p_2cdots p_k 且 p_1p_2cdots p_k 互不相同 \ 0, ;;;;;;;; n 有平方因子 end{cases} ]

    通过例题学习基本技巧与小 trick(待补)

    基本套路

    最常见的套路

    对于 (sum_{1 le i,j le n} ext f(gcd(i,j))) 来说, 如果能找到 ( ext g) 使得 ( ext f = ext g * ext 1), 那么就有:

    [sum_{1 le i,j le n} ext f(gcd(i,j)) = sum_{1 le i,j le n} sum_{d|gcd(i,j)} g(d) = sum_{1 le i,j le n} sum_{d|i, d|j} g(d) ]

    由于一个广为人知的式子: (sum_{a_i in A} a_i = sum_{a_i} a_i * (:a_i在A中出现的次数:)), 有

    [sum_{1 le i,j le n} sum_{d|i, d|j} g(d) = sum_{1 le d le n} g(d) lfloor frac{n}{d} floor lfloor frac{n}{d} floor]

    (i,j) 的上界不同时也差不多。

    整除分块
    定理:对于一个固定的正整数 (n) 和正整数 (k in [1,n])(lfloor frac{n}{k} floor) 最多有 (O(sqrt n)) 种, 且使得值为 (q) 的最大的 (k)(lfloor frac{n}{q} floor)
    证明:再补吧。
    应用:整除函数 (Div_k(n) = lfloor frac{k}{n} floor) 是递减函数, 由此衍生出应用。

    本题用不到的小trick
    ( ext{id}(n) = n)( ext{id} = ext 1 * varphi)

    更高级的套路

    怎么化这个式子?

    [sum_{1 le i le n} sum_{1 le j le m} ext f(gcd(i,j)) f(i) F(j) ]

    解:

    [sum_{1 le i le n} sum_{1 le j le m} ext f(gcd(i,j)) f(i) F(j) ]

    [=sum_{d=1}^{min(n,m)} ext f(d) sum_{i=1}^{lfloor frac{n}{d} floor} sum_{j=1}^{lfloor frac{m}{d} floor} f(id)F(jd)[gcd(i,j)=1] ]

    [= sum_{d=1}^{min(n,m)} ext f(d) sum_{i=1}^{lfloor frac{n}{d} floor} sum_{j=1}^{lfloor frac{m}{d} floor} f(id)F(jd) sum_{k|gcd(i,j)} mu(k) ]

    [= sum_{d=1}^{min(n,m)} ext f(d) sum_{k=1}^{min{ lfloor frac{n}{d} floor, lfloor frac{m}{d} floor }} mu(k) sum_{i=1}^{lfloor frac{n}{kd} floor} sum_{j=1}^{lfloor frac{m}{kd} floor} f(idk)F(jdk) ]

    枚举 (T = kd)

    [原式 = sum_{T=1}^{min(n,m)} sum_{d|T} ext f(d)mu(frac{T}{d}) sum_{i=1}^{lfloor frac{n}{T} floor} sum_{j=1}^{lfloor frac{m}{T} floor} f(iT)F(jT) ]

    计算 (mu * ext t) 的技巧

    定义

    [q_i(n) = egin{cases} 1 , ; ; ; ; ; n=1\ -1, ; ; n = p_i \ 0 , ;;;;;elseend{cases} ]

    其中, (p_i) 是第 (i) 小的质数。

    结论:那么 (mu = q_1 * q_2 * cdots)
    证明:如果看下这个式子 ((q_1 * q_2 * cdots )(n)= sum_{i_1i_2cdots = n} q_1(i_1)q_2(i_2)cdots) ,还是挺显然的。
    以此的算法及其复杂度:算法很显然, 将一个函数卷上 (q_i), 需要 (O(frac{n}{p_i})) 的时间, 卷上 (q_1, q_2, cdots) 就需要 (O(sum_{p_i le n} frac{n}{p_i}) = O(n loglog n)) 的时间。(不会证, 但肯定优于 (O(n log n))

    (prod) 号的处理

    (gcd(a,b)) 的性质的推导方法

  • 相关阅读:
    Kail命令
    [UIScreen mainScreen].applicationFrame与[UIScreen mainScreen].bounds区别
    Excel使用技巧
    vs2012配置OpenGL
    IP首部校验和的计算
    链接保存
    Android精讲--界面编程1(界面编程与视图的组件)
    Intent对象详解
    安卓四大组件之--Service
    android的事件处理机制
  • 原文地址:https://www.cnblogs.com/tztqwq/p/13460285.html
Copyright © 2011-2022 走看看