莫比乌斯反演·学习记录

莫比乌斯反演·学习记录

cyw在6.8左右学的莫比乌斯反演,记录一下



这个东西感觉不大好描述,我一开始也不知道这玩意能干嘛(其实现在也不知道)

CYW认为,对关于一些因数/倍数关系进行操作的行为,可以用莫比乌斯反演来解决


莫比乌斯函数

这并不是什么高大上的东西,但是很有用

对于 莫比乌斯函数 的定义是

  1. $d=1,\mu(d)=1 $
  2. \(d=\prod_{k=1}^n p_k\;(k\in prime),\mu(d)=(-1)^k\)

    即数\(d\)可以被表示为若干互异素数相乘的形式(指数不超过\(1\)),此时函数值根据分解数量而定

  3. \(Otherwise,\mu(d)=0\)

当然了 它有一些性质

  • \(\mu\)是积性函数,这是它可以通过线性筛求的必要条件
  • 对于正整数\(n\),\(\sum_{d|n}\mu(d)=[n=1]\),这是莫比乌斯反演中非常常用的一条性质
  • 对于正整数\(n\),\(\sum_{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}\),不过这个我还没用过
  • \[\mu \times id\;=\;\phi\]

    \(\times\)表示卷积,这里是常见狄利克雷卷积的一种,有的时候有奇效

    在公式里书写为

    \[\sum_{d|n}\mu(\frac{n}{d})*d=\phi(n)\]

    贴一份线筛代码

inline void getmiu(int n){
    memset(vis,0,sizeof(vis));
    mu[1]=vis[1]=1;
    for (int i=2;i<=n;i++){
        if (!vis[i]){pri[++cnt]=i;mu[i]=-1;}
        for (int j=1;j<=cnt&&(LL)i*pri[j]<=n;j++){
            vis[i*pri[j]]=1;
            if (i%pri[j]==0) break;else mu[i*pri[j]]=-mu[i];
        }
    }
}

PS:一些题目中要求\(\sum\mu(d)\),可以通过预处理来降低复杂度


整除分块

一个同样在莫比乌斯反演及一些计算中十分重要的东西

\[\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\]

这个东西暴力算是\(O(N)\)的,容易发现,\(\lfloor\frac{n}{i}\rfloor\)至多只有\(\sqrt{n}\)种取值,可以对每种取值的个数进行计算,再乘上对应的i,复杂度\(O(\sqrt{n})\)

for (int l=1,r;l<=n;l=r+1){   //可能会用到(for LL l=1,r;...)
    r=n/(n/l);
    ans+=(LL)(n/l)*(r-l+1); //注意在部分大运算前加(LL)或"1ll*",避免炸int
}


好的,那么所有的前言:莫比乌斯函数,整除分块都讲完了,可以开始我们的正题

莫比乌斯反演


莫比乌斯反演

(有点小困 明晚更完)

原文地址:https://www.cnblogs.com/ugly-CYW-lyr-ddd/p/9180442.html

时间: 2024-10-09 20:47:49

莫比乌斯反演·学习记录的相关文章

莫比乌斯反演学习【莫比乌斯反演】

看了好久也没看懂莫比乌斯是什么,先贴一段代码吧,好像是求莫比乌斯反演的一个函数的值 int mobi(int n){ int m=1; for(int i=2;i*i<=n;i++){ if(n%i==0){ m*=-1; int k=0; do{ k++; if(k>1){ m=0; break; } n/=i; }while(n%i==0); } } if(n>1) m*=-1; return m; }

莫比乌斯反演学习笔记

莫比乌斯反演,之前做过一些题,一直没有太理解,膜了下faebdc学长的姿势,终于搞懂了一些. 首先我们有两个式子: 1:∑d|n?(d)=n2:∑d|nμ(d)=e(n) 1式证明:对于n的质因数x对?(n)贡献了(x?1)?xt?1 单独对于x而言约数可以为x0,x1,...,xt,设约数xt?1满足以上式子: 则对于xt而言有xt?1+(x?1)?xt?1=xt,同样成立,归纳法得证. 2式证明,这与莫比乌斯函数性质有关. 然后我们就可以推式子了: 1Dgcd ∑ni=1gcd(i,n)=∑

莫比乌斯反演学习博客

莫比乌斯反演 1 2 3 原文地址:https://www.cnblogs.com/gzr2018/p/10306020.html

算法学习-莫比乌斯反演

写在前面 必须把更多的精力放在文化课上了, 所以这段时间的学习和数学相关的比较多, 希望可以对文化课有帮助. 莫比乌斯反演公式 g(n)=∑d|nf(d)?f(n)=∑d|nμ(d)g(nd) 基础知识 μ函数 f(n)=???1,(?1)k,0,n=1n=p1?p2?...?pkn=others μ 函数是积性函数, 因为当 n 是质数时 μ(n)=(?1)1=?1, 所以可以通过筛法求出 μ 函数. mu[1] = 1; for(i = 2; i <= n; i++) { if(!vis[i

学习笔记--数论--莫比乌斯反演初认识

前言 本文只是用比较通俗的例子让大家了解一下什么是莫比乌斯反演,其中说明 (明明都是瞎猜)可能有纰漏.本人也是个蒟蒻,未能给出珂学证明,还望多多指教. 理论基础 "|"符号表示整除, a|b 表示b被a整除,也就是b有a这个因数,b=ka (k∈N). "∑ "求和符号 是什么 请先看这个例子: 假设有两个函数F(n),f(d),且d∈{x| x|n(即n被d整除)} 并有以下关系:F(n)等于所有f(d)之和. 比如:6能被1,2,3,6整除,所以F(6)=f(1

算法学习——莫比乌斯反演(1)

.. 省选GG了,我果然还是太菜了.. 突然想讲莫比乌斯反演了 那就讲吧! 首先我们看一个等式-- (d|n表示d是n的约束) 然后呢,转换一下 于是,我们就发现! 没错!F的系数是有规律的! 规律is here! 公式: 这个有什么卵用呢? 假如说有一道题 F(n)可以很simple的求出来而求f(n)就比较difficult了,该怎么办呢? 然后就可以用上面的式子了 是莫比乌斯函数,十分有趣 定义如下: 若d=1,则=1 若d=p1*p2*p3...*pk,且pi为互异素数,则=(-1)^k

[莫比乌斯反演]【学习笔记】[更新中]

参考资料: [大部分还没看完,目前主要看了popoqqq那篇 orz] http://wenku.baidu.com/link?url=Kzzxkk64CFU7sfDeJbGKNpZpFJzJY1ZwNoaPgGo7tPSpv4KJvGAkStkpzytG46gjQuqNX7NB0merxfS4knD2H5fw7s4oHu1o1-6p16_VbEm http://wenku.baidu.com/view/77396ebb27d3240c8547ef2e.html?re=view 浅谈一类积性函数

BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][Discuss] Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如,LCM(6, 8) = 24.回到家后,Crash还在想着课上学的东西,为了研究

bzoj2154(莫比乌斯反演)

又是一道经典题. 学习了下O(n) 的做法. // // main.cpp // bzoj2154 // // Created by New_Life on 16/7/7. // Copyright © 2016年 chenhuan001. All rights reserved. // #include <iostream> #include <string.h> #include <stdio.h> using namespace std; #define N 10