前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >莫比乌斯反演0

莫比乌斯反演0

作者头像
attack
发布2018-04-11 14:17:25
8060
发布2018-04-11 14:17:25
举报

弃坑

莫比乌斯函数

定义

设函数\mu(n)为莫比乌斯函数

\mu =\begin{cases}\left( -1\right) ^{k}\left( n=p_{1}p_{2}\ldots p_{k}\right) \\ O\left( \exists P^{2}|n\right) \\ 1\left( n=1\right) \end{cases}

性质

  • \mu(n)为积性函数
  • \sum _{d|n}\mu \left( d\right) =\left[ n=1\right](非常重要!!)

莫比乌斯反演

公式

如果

g\left( n\right) =\sum _{d|n }f\left( d\right)

那么

f\left( n\right) =\sum _{d|n}\mu \left( d\right) g\left( \dfrac {n}{d}\right)

证明

\sum _{d|n}\mu \left( d\right) g\left( \dfrac {n}{d}\right)

=\sum _{d|n}\mu \left( \dfrac {n}{d}\right) g\left( d\right)

=\sum _{d|n}\mu \left( \dfrac {n}{d}\right) \sum _{k|d}f\left( k\right)

=\sum _{k|n}\sum_{d|{\dfrac{n}{k}}}\mu(d)f(k)

=\sum _{k|n}[\dfrac{n}{k}=1]f(k)

=f(n)

莫比乌斯函数的计算方法

因为\mu(n)为积性函数

那么可以利用线性筛来计算

代码语言:javascript
复制
#include<cstdio>
#include<cstring>
const int MAXN=1e6+10;
int prime[MAXN],mu[MAXN],vis[MAXN],tot,n;
void Euler()
{
    vis[1]=1;mu[1]=1; 
    for(int i=2;i<=n;i++)
    {
        if(!vis[i])    prime[++tot]=i,mu[i]=-1;//只有一个质因子 
        for(int j=1;i*prime[j]<=n&&j<=tot;j++)
        {
            vis[ i*prime[j] ]=1;
            if(i%prime[j]==0)//i中包含prime[j] 
            {
                mu[ i*prime[j] ]=0;//乘起来之后肯定包含prime[j]^2 
                break; 
            }
            else mu[ i*prime[j] ]=-mu[i];//多了一个质因子 
        }
    }
}
int main()
{
    printf("Please input number:\n");
    scanf("%d",&n);
    Euler();
    printf("%d",mu[n]);
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 弃坑
  • 莫比乌斯函数
    • 定义
      • 性质
      • 莫比乌斯反演
        • 公式
          • 证明
          • 莫比乌斯函数的计算方法
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档