莫比乌斯反演入门讲解

莫比乌斯反演入门讲解莫比乌斯反演实际上是一两个公式定理的运用 自认为想要掌握它的话 其中的证明还是有必要了解的 看过网上一些博客 感觉都只证明了一半 没看到有人将这个定理完全证明出来 然而我最近在正好在学习初等数论 发现完全证明这个定理实际上并不需要很多知识 特此填坑 另外加上一些应用以构成完整的讲解 实际上 这个定理的证明用到了一点数论函数相关知识 前置技能在此 https blog csdn net t

莫比乌斯反演实际上是一两个公式定理的运用,自认为想要掌握它的话,其中的证明还是有必要了解的。看过网上一些博客,感觉都只证明了一半,没看到有人将这个定理完全证明出来。然而我最近在正好在学习初等数论,发现完全证明这个定理实际上并不需要很多知识,特此填坑。

实际上,这个定理的证明用到了一点数论函数相关知识。前置技能在此

https://blog.csdn.net/tomandjake_/article/details/

内容并不多,自认为把这一页笔记内容学会,自己就可以把莫比乌斯反演的证明当练习题一样独立完成。接下来我还是会解释,当然,如果觉得我的解释不好,完全可以自己看这个笔记学习,我甚至都推荐自己看笔记,因为如果熟悉这样的数学语言,其实看的很快而且会有自己的认识。而且其中给出了欧拉函数的推导,没有学过欧拉函数的话,看这个也可以更加高效地学完这一块内容。(注意笔记中(m,n)=gcd(m,n) )

 

好,进入正题。首先引入三个定义

Definition 1 可乘函数:算术函数f,满足 只要gcd(m,n) =1,就有f(mn)=f(m)f(n)。

没错, 比其他可乘函数宽泛一点,只要在gcd(m,n)=1条件下满足可乘就行。然后我们知道由唯一分解定理,任何正整数n可分解为若干素数的幂方积n=p^{\alpha 1}_{1} p^{\alpha 2}_{2} .....p^{\alpha k}_{k},所以若\theta为可乘函数,有

                                                         \theta ( n) =\theta \left( p1^{\alpha 1}\right) \theta \left( p2^{\alpha 2}\right) ...\theta \left( pk^{\alpha k}\right)    …………………………………………………………(1)

Definition 2 \sum _{d|n}: 代表对n的所有正因子求和,如

                                                                   \sum _{d|4}d^2=1^2+2^2+4^2

Definition 3 莫比乌斯函数:

         莫比乌斯反演入门讲解

定义有点奇怪,关于这个函数,之后我们可以看到它的作用, 必须提到的是,可以证明,莫比乌斯函数是可乘函数

然后是我们的目标—-莫比乌斯反演定理:

Theorem 1 莫比乌斯反演定理: F(n)和f(n)为算术函数,若他们满足

                                                         F(n)=\sum_{d|n}f(d)

则有

                                                      f(n)=\sum_{d|n}\mu(d)F(\frac{n}{d})

证明如下:

首先给出一个定理,

莫比乌斯反演入门讲解

至于\sum_{d|n}\theta(d)为可乘函数的证明,可参见我的笔记。

之后可以得到下一个定理

莫比乌斯反演入门讲解

定理3证明:

莫比乌斯反演入门讲解

可以看到,莫比乌斯反演提供了一个F(n)与f(n)的连接,而他们之间的桥梁就是莫比乌斯函数\mu。之后我们会看到具体的例子。这里先给出线性筛莫比乌斯函数的代码:

int mu[maxn], vis[maxn]; int primes[maxn], cnt; void get_mu() { memset(vis, 0, sizeof(vis)); memset(mu, 0, sizeof(mu)); cnt = 0; mu[1] = 1; for (int i = 2; i <= maxn; ++i) { if (!vis[i]) { primes[cnt++] = i; mu[i] = -1; } for (int j = 0; j 
  

应用举例:POJ 3904

题目给出n和n个正整数,问能找出多少个不同的四元组(a,b,c,d)使得该四元组的最大公因数为1.

分析:

首先要提的是,我们做题目往往用的是莫比乌斯反演的另外一种形式:

莫比乌斯反演入门讲解

既然要用到莫比乌斯反演,我们首先就要找到合适的F和f。实际上,F和f的关系在于整除。我们可以假设

                                                        F(n)为有多少个四元组满足gcd(a,b,c,d)=n的整数倍

                                                        f(n)为有多少个四元组满足gcd(a,b,c,d)=n

所以我们的目标就是求f(1), 而实际上可以看出F与f构成了一组莫比乌斯变换对。有了反演公式,我们可以通过求F来求f,而这里面F很好求,要求F(n)我们只要在原数组中数出到能被n整除的数的个数m, 则C(m,4)就是F(n)

而由公式,由此我们可以发现 莫比乌斯反演入门讲解

直接计算即可。

代码:

#include 
  
    #include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
          #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include 
                
                  using namespace std; #define _for(i,a,b) for(int i=(a);i<(b);++i) #define _rep(i,a,b) for(int i=(a);i<=(b);++i) typedef long long LL; const int INF = 1 << 30; const int MOD = 1e9 + 7; const int maxn = 10005; int n, a[maxn], tot[maxn]; int mu[maxn], vis[maxn]; int primes[maxn], cnt; void get_mu() { memset(vis, 0, sizeof(vis)); memset(mu, 0, sizeof(mu)); cnt = 0; mu[1] = 1; for (int i = 2; i <= maxn; ++i) { if (!vis[i]) { primes[cnt++] = i; mu[i] = -1; } for (int j = 0; j 
                  
                 
                
               
              
             
            
           
         
        
       
      
     
    
  

这样莫比乌斯反演就算是入门了吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211095.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:13
下一篇 2026年3月18日 下午11:13


相关推荐

  • python语言的多行注释以什么开头和结尾_python多行注释

    python语言的多行注释以什么开头和结尾_python多行注释广告关闭腾讯云 11 11 云上盛惠 精选热门产品助力上云 云服务器首年 88 元起 买的越多返的越多 最高返 5000 元 1 单行注释 如 hellopython2 多行注释 三个单引号 或三个双引号 如 hellopythonh 或 hellopythonh 三个单引号 或三个双引号 也可以表示跨行字符串 如 gt gt gt s

    2026年3月20日
    1
  • 基尼系数的计算原理是什么_基尼系数1

    基尼系数的计算原理是什么_基尼系数1理论基尼指数( GiniIndex )是20世纪初经济学家基尼定义的指标,最为知名的应用是考察居民收入的差异情况。居民收入的情况符合幂指函数( PowerLaw )分布,最直观(但非准确)的理解就是 80/20 原则,也就是 20%的人拥有了 80% 的人的财富。用公式表示就是描述了是收入靠后 %x 的人所拥有的收入总和占所有人收入总和的比例 f(x) 的关系。

    2022年10月13日
    5
  • iBatis和 MyBatis的区别

    iBatis和 MyBatis的区别本文主要讲述了 iBatis2 x 和 MyBatis3 0 x 的区别 以及从 iBatis 向 MyBatis 移植时需要注意的地方 通过对本文的学习 读者基本能够了解 MyBatis 有哪些方面的改进 并能够顺利使用 MyBatis 进行开发 本文更适合有 iBatis 基础的开发人员阅读 从 iBatis 到 MyBatis 你准备好了吗 对于从事 Jav

    2026年3月17日
    3
  • matlab手写数字识别实验报告_如何用matlab将图像转为矩阵

    matlab手写数字识别实验报告_如何用matlab将图像转为矩阵本文主要是根据《matlab手写神经网络实现识别手写数字》博客中的代码进行试验。由于没有数据集,所以采用了MNIST数据集进行代码的运行。数据集不同所以需要对代码进行微小改动。简介数据处理:4000张作为训练样本,1000张作为测试样本;图像大小:图片的灰度值矩阵(28,28);图像名称:由标签和顺序号组成。标签_顺序号.bmp训练样本:每个数字的图像名称的顺序号是从0-399,各400…

    2025年11月17日
    5
  • 学习笔记—高等数学前置知识—乘法公式与因式分解

    学习笔记—高等数学前置知识—乘法公式与因式分解乘法公式平方差公式 算式 a 2 b 2 a b a b 完全平方公式 算式 a 2 2ab b 2 a b 2 算式 a 2 2ab b 2 a 2 2 算式 a b c 2 a 2 b 2 c 2 2 ab ac bc 算式 a b c 2 a 2 b 2 c 2 2 ab ac bc 算式 a b 3

    2026年3月18日
    2
  • 微服务架构-实现技术之具体实现工具与框架7:Spring Cloud Zuul原理与注意事项「建议收藏」

    目录一、SpringCloudZuul概述二、SpringCloudZuul典型基本配置:路由配置和功能配置(一)路由配置:配置简化与规则+路由通配符1.单实例serviceId映射(可不短简化,具体如下)2.单实例url映射3.多实例映射(Zuul默认使用Eureka集成的负载均衡功能,所以若使用该功能需要做如下两件事:见注释)4.forward本地跳转(针…

    2022年4月6日
    84

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号