zoukankan      html  css  js  c++  java
  • 莫比乌斯反演

    莫比乌斯反演在数论中占有重要的地位,许多情况下能大大简化运算,特别是对于求解gcd的问题。

    在学习莫比乌斯反演之前,我们先了解下积性函数。

    积性函数

    定义:定义域为N+ 的函数 f,对于任意两个互质的正整数a, b: gcd(a, b) = 1,均满足f(ab) = f(a) ∗ f(b),则函数f 被称为积性函数。假如对于任意两个正整数a, b 均有f(ab) = f(a) ∗ f(b),则称f 为完全积性函数。

    欧拉函数是积性函数,但不是完全积性函数。

    积性函数的性质

    • f(1) = 1

    • 考虑一个大于1 的正整数N,设N = piai ,其中 pi 为互不相同的质数,那么对于一个积性函数 f, f(N) = f(piai) =  f(piai) , 如果f 还满足完全积性,则 f(N) =  f(pi)ai

    • 若 f(n), g(n) 均为积性函数,则函数h(n) = f(n)g(n) 也为积性函数。

    • 若 f(n) 为积性函数,则函数F(n) = Σd|n f(d) 也是积性函数,反之亦然。

     

    莫比乌斯反演

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

    这是莫比乌斯反演的一般描述,即:

    而在算法竞赛中,我们常用的是它的另一种描述:

     

     

    其中为莫比乌斯函数,它的定义如下:

    (1)若,那么

    (2)若均为互异素数,那么

    (3)其它情况下

     

    对于函数,它有如下的常见性质

    (1)对任意正整数

                            

    证明
    ① 当n == 1 时显然
    ② 当n ! = 1 时,将 n 分解可以得到 

    在 n 的所有因子中,µ值不为零的只有所有质因子次数都为1的因子,其中质因数个数为 r 个的因子有
    那么显然有:

    只需证明    即可

    二项式定理:

    令  x = 1 , y = -1,代入即可得证。

    (2)对任意正整数

             

    证明

    只需要令,代入莫比乌斯反演的公式即可

    由欧拉函数的性质可得,结论得证。

    现在我们来证明莫比乌斯反演定理。

    证明

    这里我们利用了  这条性质。

    线性筛选求莫比乌斯反演函数:

     1 int vis[maxn];
     2 int prime[maxn];
     3 int cnt;
     4 int mu[maxn];
     5 
     6 void init()
     7 {
     8     memset(vis,0,sizeof(vis));
     9     cnt=0;
    10     mu[1]=1;
    11     for(int i=2;i<maxn;i++)
    12     {
    13         if(!vis[i])
    14         {
    15             prime[cnt++]=i;
    16             mu[i]=-1;
    17         }
    18         for(int j=0;j<cnt&&i*prime[j]<maxn;j++)
    19         {
    20             vis[i*prime[j]]=1;
    21             if(i%prime[j])
    22                 mu[i*prime[j]]=-mu[i];
    23             else
    24             {
    25                 mu[i*prime[j]]=0;
    26                 break;
    27             }
    28         }
    29     }
    30 }
  • 相关阅读:
    ubuntu用mentohust连接ruijie
    vim系统剪切板
    JSP 页面中用绝对路径显示图片
    response.setContentType与 request.setCharacterEncoding 区别
    安装mysql数据库要注意的
    eclipse link方式安装插件安装不上
    Windows程序调用dll
    DP 问题
    LeetCode Repeated Substring Pattern
    LeetCode Number of Segments in a String
  • 原文地址:https://www.cnblogs.com/yaoyueduzhen/p/6028311.html
Copyright © 2011-2022 走看看