zoukankan      html  css  js  c++  java
  • 杜教筛

    今天被杜教筛折磨得有点难受,写一个笔记

    前置知识

    常见积性函数

    主要是为了找到方便求的数论函数

    分别有

    • 常见积性函数:(varphi),(mu),(sigma),(d)

    • 常见的完全积性函数:(epsilon),(I),(id)

    其中(ϵ(n)=[n=1]),(I(n)=1),(id(n)=n)

    狄利克雷卷积

    对于两个数论函数(f)(g),狄利克雷卷积为

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

    • 常见卷积性质:
      1. (varphi*I=id)
      1. (mu*I=epsilon)
      1. (mu*id=varphi)

    推导过程

    设我们要求的函数(f)的和(sum^{n}_{i=1}{f(i)}=S(n))

    找到一个函数(g)与函数(f)相卷

    [sum^{n}_{i=1}{(f*g)(i)}\ =sum^{n}_{i=1}sum_{d|i}{f(d)g(frac{i}{d})}\ =sum^{n}_{d=1}{g(d)}sum^{lfloorfrac{n}{d} floor}_{i=1}{f[i]}\ =sum^{n}_{d=1}{g(d)S(lfloorfrac{n}{d} floor)} ]

    导出这个过后,我们转化一下

    [sum^{n}_{i=1}{(f*g)(i)}=sum^{n}_{d=1}{g(d)S(lfloorfrac{n}{d} floor)}\ sum^{n}_{i=1}{(f*g)(i)}={g(1)S(n)}+sum^{n}_{d=2}{g(d)S(lfloorfrac{n}{d} floor)} ]

    我们要求的东西是(S),而由上面的可以知道,只要知道某些比(n)小的(S)就可以推出(S(n))

    显然我们后面的可以用数论分块做到类根号

    不过,这里需要((f*g)(i))(g(i))都可以快速算出,也就是预处理这个的复杂度不能大于杜教筛的复杂度

  • 相关阅读:
    为Internal页面添加一个Unit Test的运行入口
    使用 AWSTATS 来查看IIS/iisnode 日志
    用issnode+IIS来托管NodeJs Server之四:支持Debug
    Restify实践
    Mocha实践
    Graphite实战
    StatsD与Graphite联合作战
    单元测试
    NHibernate配置
    NHibernate概念
  • 原文地址:https://www.cnblogs.com/zzqdeco/p/13377230.html
Copyright © 2011-2022 走看看