莫比乌斯反演

前置知识

  积性函数

    积性函数指对于所有互质的整数ab有性质f(ab)=f(a)f(b)的数论函数若对于所有整数ab都有性质f(ab)=f(a)f(b)成立,则称f(n)是完全积性的。例如ϕ(n)为积性函数。

  数论函数

    定义

    数论函数(或称算术函数)指定义域为正整数的函数。

    例子

    1)单位函数ϵ(n)=[n=1]

      [A]表示A为真时为1,否则为0

    2)常值函数1(n)=1

    3)恒值函数id(n)=n

    4)欧拉函数ϕ(n)=i=1n[gcd(i,n)=1]

    若将n质因数分解有n=i=1kpici,则ϕ(n)=ni=1k(11pi)(定义)

  狄利克雷卷积

    定义

    对于任意两个数论函数f,g,它们的狄利克雷卷积为h=fg

    表示为:

(fg)(n)=d|nf(d)g(nd)

    或

(fg)(n)=i×j=nf(i)g(j)

    性质

    1)结合律(fg)h=f(gh)

    2)分配律f(g+h)=fg+fh

    3)(αf)g=α(fg)

    4)ϵf=f

    5)两个积性函数的卷积也为积性函数

    性质的证明

    1)结合律

      LHS=[(fg)h](n)=d×k=n(fg)(d)h(k)=d×k=nh(k)i×j=df(i)g(j)=i×j×k=nf(i)g(j)h(k)

      同理RHS=i×j×k=nf(i)g(j)h(k),故结论得证

    2)分配律

      [f(g+h)](n)=i×j=nf(i)(g+h)(j)=i×j=nf(i)[g(j)+h(j)]=i×j=nf(i)g(j)+i×j=nf(i)h(j)=(fg+fh)(n)

    3)LHS=i×j=n(αf(i))g(j)=αi×j=nf(i)g(j)=RHS

    4)LHS=i×j=nϵ(i)f(j)=ϵ(1)f(n)+0d|n,dnf(d)=f(n)=RHS

      所以ϵ(n)是狄利克雷卷积中的单位元

    5)略

    逆元

    f的逆元记作f1其满足:ff1=ϵ

    可以表达为:

f1(n)={1f(1),if n=11f(1)d|n,d1f1(nd)f(d),if n1

 


 

正文

  莫比乌斯函数

    定义

μ(n)={1,n=1(1)k,n无大于1的平方数因数,且质因数分解n有n=p1p2pk0,n有大于1的平方因数

    性质

    1)μ(n)是积性函数。

    2)1μ=ϵ,即μ(n)是常值函数1(n)的逆元

    3)d|nμ(d)d=ϕ(n)n,即idμ=ϕ

    证明

    性质一略。

    对于性质二,若n=1,结论显然,若n1,设n=i=1αpiki

    则(μ1)(n)=d|nμ(d)=(α0)+(α1)(1)+(α2)(1)2++(αα)(1)α=[(1)+1]α=0

    对于性质三,当n=pk,p为质数时,d|nμ(d)d=μ(1)+μ(p)p+μ(p2)p2++μ(pk)pk=11p=ϕ(n)n

n=i=1αpiki,pi为质数时,由积性函数性质,ϕ(n)n=i=1αϕ(piki)=i=1αd|pikiμ(d)d=d|nμ(d)d

    线性筛求莫比乌斯函数值

  莫比乌斯反演

    若f(n)=d|ng(d),则g(n)=d|nμ(d)f(nd),其中数论函数f(n)称为数论函数g(n)的莫比乌斯变换,数论函数g(n)称为数论函数f(n)的莫比乌斯逆变换(反演)

    证明只需对fμ即可

    应用

    求i=1nj=1ngcd(i,j)

    利用莫比乌斯函数的第二个性质,[gcd(i,j)=1]=ϵ(gcd(i,j))=d|gcd(i,j)μ(d),所以

    i=1nj=1ngcd(i,j)=i=1nj=1nk=1nk[gcd(ik,jk)=1]=k=1ni=1nkj=1nkk[gcd(i,j)=1]=k=1nki=1nkj=1nkd|gcd(i,j)μ(d)=k=1nkd=1nμ(d)i=1nk[d|i]j=1nk[d|j]=k=1nd=1nkμ(d)nkdnkd

    接下来对k进行数论分块即可,时间复杂度为O(nlnn),对应的朴素算法时间复杂度O(n2logn)(枚举O(n2)×辗转相除法O(logn)

1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 int mu[2000010], p[2000010]; 5 int tot; 6 bool f[2000010]; 7 int main() 8 { 9 int n; 10 cin >> n; 11 mu[1] = 1; 12 for(int i = 2; i <= n; i++) 13 { 14 if(!f[i]){ 15 mu[i] = -1; 16 p[++tot] = i; 17 } 18 for(int j = 1; j <= tot; j++) 19 if((i * p[j]) <= n){ 20 f[i * p[j]] = 1; 21 if(i % p[j] == 0)mu[i * p[j]] = 0; 22 else mu[i * p[j]] = -mu[i]; 23 }else break; 24 } 25 long long res = 0; 26 for(int d = 1; d <= n; d++) 27 { 28 if(mu[d] == 0)continue; 29 int N = n/d; 30 int k = 1; 31 while(k <= N) 32 { 33 int p = N / (N / k) + 1; 34 res = res + 1ll * mu[d] * (N / k) * (N / k) * (1ll * (p - 1 + k) * (p - k) / 2); 35 k = p; 36 } 37 } 38 printf("%lld", res); 39 return 0; 40 }

__EOF__

本文作者登峰造极
本文链接https://www.cnblogs.com/nulidejuruo/p/18491682.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   蒟蒻121  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示