莫比乌斯反演

莫比乌斯反演莫比乌斯函数值 intmobi intn intm 1 for inti 2 i i n i if n i 0 m 1 intk 0 do

莫比乌斯反演在数论中占有重要的地位,许多情况下能大大简化运算。那么我们先来认识莫比乌斯反演公式。

 

定理:莫比乌斯反演莫比乌斯反演是定义在非负整数集合上的两个函数,并且满足条件莫比乌斯反演,那么我们得到结论

 

     莫比乌斯反演

 

在上面的公式中有一个莫比乌斯反演函数,它的定义如下:

 

    (1)若莫比乌斯反演,那么莫比乌斯反演

    (2)若莫比乌斯反演莫比乌斯反演均为互异素数,那么莫比乌斯反演

    (3)其它情况下莫比乌斯反演

 

 

对于莫比乌斯反演函数,它有如下的常见性质:

 

    (1)对任意正整数莫比乌斯反演

  

                            莫比乌斯反演

 

        (2)对任意正整数莫比乌斯反演

 

         莫比乌斯反演

 

线性筛选求莫比乌斯反演函数代码。

void Init() { memset(vis,0,sizeof(vis)); mu[1] = 1; cnt = 0; for(int i=2; i 
  

有了上面的知识,现在我们来证明莫比乌斯反演定理。

 

证明

 

莫比乌斯反演

 

证明完毕!

 

嗯,有了莫比乌斯反演,很多问题都可以简化了,接下来我们来看看莫比乌斯反演在数论中如何简化运算的。

 

 

题目:http://bz.cdqzoi.com/JudgeOnline/problem.php?id=2818

 

题意:给一个正整数莫比乌斯反演,其中莫比乌斯反演,求使得莫比乌斯反演为质数的莫比乌斯反演的个数,莫比乌斯反演

 

分析:对于本题,因为是使得莫比乌斯反演为质数,所以必然要枚举小于等于莫比乌斯反演的质数,那么对于每一个质数莫比乌斯反演,只

     需要求在区间莫比乌斯反演中,满足有序对莫比乌斯反演互质的对数。

 

     也就是说,现在问题转化为:在区间莫比乌斯反演中,存在多少个有序对使得莫比乌斯反演互质,这个问题就简单啦,因为

     是有序对,不妨设莫比乌斯反演,那么我们如果枚举每一个莫比乌斯反演,小于莫比乌斯反演有多少个莫比乌斯反演莫比乌斯反演互素,这正是欧拉函数。所以

     我们可以递推法求欧拉函数,将得到的答案乘以2即可,但是这里乘以2后还有漏计算了的,那么有哪些呢?

     是莫比乌斯反演且为素数的情况,再加上就行了。

 

代码:

#include 
  
    #include 
   
     #include 
    
      #include 
     
       using namespace std; typedef long long LL; const int N = ; bitset 
      
        prime; LL phi[N]; LL f[N]; int p[N]; int k; void isprime() { k = 0; prime.set(); for(int i=2; i 
       
         >= 1; for(int i=3; i 
         
        
       
      
     
    
  

嗯,上题不算太难,普通的欧拉函数就可以搞定,接下来我们来看看它的升级版。

 

题意:给定两个数莫比乌斯反演莫比乌斯反演,其中莫比乌斯反演莫比乌斯反演,求莫比乌斯反演为质数的莫比乌斯反演有多少对?其中莫比乌斯反演莫比乌斯反演的范

     围是莫比乌斯反演

 

分析:本题与上题不同的是莫比乌斯反演莫比乌斯反演不一定相同。在这里我们用莫比乌斯反演来解决,文章开头也说了它能大大简化

     运算。我们知道莫比乌斯反演的一般描述为:

 

     莫比乌斯反演

 

     其实它还有另一种描述,本题也是用到这种。那就是:

 

     莫比乌斯反演

 

     好了,到了这里,我们开始进入正题。。。

 

     对于本题,我们设

 

     莫比乌斯反演为满足莫比乌斯反演莫比乌斯反演莫比乌斯反演莫比乌斯反演的对数

     莫比乌斯反演为满足莫比乌斯反演莫比乌斯反演莫比乌斯反演莫比乌斯反演的对数

 

     那么,很显然莫比乌斯反演,反演后得到莫比乌斯反演

 

     因为题目要求是莫比乌斯反演为质数,那么我们枚举每一个质数莫比乌斯反演,然后得到

 

     莫比乌斯反演

 

     如果直接这样做肯定TLE,那么我们必须优化。

 

     我们设莫比乌斯反演,那么继续得到莫比乌斯反演

 

     到了这里,可以看出如果我们可以先预处理出所有的莫比乌斯反演对应的莫比乌斯反演的值,那么本题就解决了。

 

     我们设莫比乌斯反演,注意这里莫比乌斯反演为素数,莫比乌斯反演

 

     那么,我们枚举每一个莫比乌斯反演,得到莫比乌斯反演,现在分情况讨论:

 

     (1)如果莫比乌斯反演整除莫比乌斯反演,那么得到

 

       莫比乌斯反演

 

     (2)如果莫比乌斯反演不整除莫比乌斯反演,那么得到

 

       莫比乌斯反演

 

#include 
  
    #include 
   
     #include 
    
      using namespace std; typedef long long LL; const int N = ; bool vis[N]; int p[N]; int cnt; int g[N],u[N],sum[N]; void Init() { memset(vis,0,sizeof(vis)); u[1] = 1; cnt = 0; for(int i=2;i 
     
       >n>>m; if(n > m) swap(n,m); LL ans = 0; for(int i=1,last;i<=n;i=last+1) { last = min(n/(n/i),m/(m/i)); ans += (n/i)*(m/i)*(sum[last]-sum[i-1]); } cout< 
       
      
     
    
  

 

 

 

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

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

(0)
上一篇 2026年3月20日 上午11:58
下一篇 2026年3月20日 上午11:58


相关推荐

  • 【机器学习】NMF(非负矩阵分解)

    【机器学习】NMF(非负矩阵分解)写在篇前  本篇文章主要介绍NMF算法原理以及使用sklearn中的封装方法实现该算法,最重要的是理解要NMF矩阵分解的实际意义,将其运用到自己的数据分析中!理论概述  NMF(Non-negativematrixfactorization),即对于任意给定的一个非负矩阵V,其能够寻找到一个非负矩阵W和一个非负矩阵H,满足条件V=W*H,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。…

    2022年6月16日
    53
  • Bozz Nuster_Collectivum XXVIII

    Bozz Nuster_Collectivum XXVIII这篇文章主要讲的是在Libprotobuf-mutator与LibFuzzer联合使用的基础上,加上custommutator功能。首先需要明确的是为什么要这么做,那么假设b字段只有为”FUZZ”或”PWN”两个字符的时候才能进入下一个程序分支的情况,当然LibFuzzer也可以在代码覆盖率的加持下进入下一个程序分支,但如果你通过逆向的方式已经知道了这个关键点,难道还需要等LibFuzzer跑出这两个字符串吗?

    2025年11月7日
    5
  • Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画[通俗易懂]

    Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画[通俗易懂]上一篇文章我们讲了怎样在不购买专业版的情况下自定义Unity的启动Logo。那本篇文章就来介绍一下,怎样在去除默认Logo的前提下制作自己的启动动画!

    2022年6月5日
    220
  • 用我的亲身经历来告诉你如何自学Java?

    用我的亲身经历来告诉你如何自学Java?在我的另一篇博文——【一年总结】记我的大一生活中,我其实已经谈过了我的大一经历,但是对于我自学Java的地方往往都是一笔带过的,因为那篇博文主要是想记录我那时所思所想,表达的主要是一种情感,而非“攻略”。所以我觉得我有必要另起一篇来专门讲讲我是如何一步一步自学Java的。

    2022年7月7日
    31
  • java SimpleDateFormat设置时区格式化时间

    java SimpleDateFormat设置时区格式化时间前情提要在 Android 开发中经常遇到有的接口需要上传当前时间 如果后台要求直接传一个 long 类型的时间戳还好 因为这个时间戳是跟时区无关的 如果后台接口要求传的是格式化的时间 若本地设备设置的时区与后台要就的时区不一致 就会导致上传的时间不准确 有问题的写法这种写法 SimpleDateFo 默认用的是本地设备设置的时区 若本地时区与后代约定的不一致就会导致问题 Simple

    2026年3月19日
    2
  • GO 第一 变量

    GO 第一 变量

    2021年5月25日
    169

发表回复

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

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