zoukankan      html  css  js  c++  java
  • 莫比乌斯专题总结

    好久了,终于把莫比乌斯那几道题做完了
    想着刚开始听学长讲课还一脸蒙比,现在已经能自己做出来较难的题了,还是很高兴的
    先对莫比乌斯反演下一个总结:把一个含有许多或的式子拆成更多的式子,然后在通过一系列操作消掉一些式子,使得最终得到的式子在给定时间内可求

    下面大量概念预警

    莫比乌斯函数µ(d)

    定义µ(d)=/1 d=1

         |(-1)^k d=p1p2p3pk(pi!=pj)

         otherwise

    性质∑d|nµ(d)=[n=1]

    证明:当n=1时,显然成立

       当n>1时,n=p1a1+p2a2+......+pkak

       则∑d|nμ(d)=μ(1)+μ(p1)+μ(p2)++μ(p1p2)++μ(p1p2p3)++μ(p1p2pk)

               =(0,k)*(-1)+(1,k)*(-1)+......+(k,k)*(-1)01k

               =0

     筛法:一般就线性筛就好了

     

    void get_mu() {
      mu[1] = 1;
      for (int i = 2; i < maxn; i++) {
        if (vis[i] == false) {
          prime[cnt++] = i;
          mu[i] = -1;
        }
        for (int j = 0; j < cnt && i * prime[j] < maxn; j++) {
          vis[i * prime[j]] = true;
          if (i % prime[j] == 0) break;
          mu[i * prime[j]] = -mu[i];
    }
    View Code

    有了这个就可以在需要判断条件的时候把判断变成简单的相加

    数论分块

    莫比乌斯反演最常用配套算法

    我们看一个简单的例子,求∑i=1~n[n/i]([]表示向下取整)

    我们发现对于一段连续的区间,[n/i]的值是相同的,那么怎么求出来这个区间呢

    经过试验我们发现对于一个起点i,和他值相等的最右端点为[n/[n/i]]

    这样我们就可以在√n的复杂度下求出该式

    对于两个限制条件m n,我们只需要取一个min就好

    for(int i=,j;i<=n;i=j+1){
                j=min((n/(n/i)),(m/(m/i)));
                ans+=(sum[j]-sum[i-1])*(n/i)*(m/i);
            }
    View Code

    卷积

    对于h(n)=∑d|nf(d)g(n/d)

    满足结合律,封闭性,单位元,逆元,同时还满足交换律

    以及最重要的:若f,g为积性函数,则h为积性函数

    一些比较常用的积性数论函数

    积性函数

    F=f1

    然后我们就可以开始做莫比乌斯反演了

    几道水题:[bzoj2820]YY的GCD

         [bzoj2693]jzptab

          [BZOJ3994]约数个数和(题解

    对我来说有难度的题:

    1 [bzoj3309] DZY Loves Math

     反演很好写,但是其中一个函数的性质没有想明白,TLE得很惨

    2 [bzoj4816]数字表格

     题解

    3 [bzoj3529]数表

     反演也很简单,就是<=a不好处理,但是n的范围又足够承受nlogn

     我们可以把所有询问都读入,然后sort一遍,配合数状数组,就可以做到nlogn了

    4 [bzoj3601] 一个人的数论(好题)

     第一道反演有难度的题,主要瓶颈在于把自然数幂和转为d+1次的多项式

     然后使用高斯消元得到多项式系数,就可以做了,复杂度很小

     (这题竟然不用筛µ,也不用数论分块)

    最后总结一下,一般就是把gcd(i,j)=1化成∑µ,再证明积性函数而做到线性筛,最后用数论分块求解

    f=μF
    ${color{Teal} 只}$${color{Teal} 是}$${color{Teal} 拼}$${color{Teal} 凑}$${color{Teal} 出}$${color{Teal} 与}$${color{Teal} 你}$${color{Teal} 在}$${color{Teal} 一}$${color{Teal} 起}$${color{Teal} 的}$${color{Teal} 时}$${color{Teal} 间}$
  • 相关阅读:
    JavaScript---动态加载script和style样式
    百度地图API----搜索地址,获取该点的位置坐标并转换成WebMercator
    ArcGIS api for JavaScript 3.27 FindTask查询功能
    Dojo.declare使用方法详解
    ArcGIS Desktop中为图像设置成不显示背景色
    网页导航条定位
    css3+JS实现幻灯片轮播图
    简单json---转树形json
    js中回调函数写法
    pom.xml文件报MavenArchiver错误 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)
  • 原文地址:https://www.cnblogs.com/mikufun-hzoi-cpp/p/11083874.html
Copyright © 2011-2022 走看看