为了能到远方,脚下的每一步都不能少.|

kroyosh

园龄:3年7个月粉丝:1关注:1

莫比乌斯反演

莫比乌斯反演

一篇莫反入门不错的文章

莫比乌斯函数

定义

n 质因数分解

n=i=1kpiαi

μ(n)={1,n=10,αi>1(1)k,αi=1

性质

  • 积性函数.
  • s(n)=d|nμ(d)={1,n=10,n1
    s(n)=d|nμ(d)=[n=1]

线性筛

code
int primes[N], cnt, mu[N];
bool st[N];
void init()
{
mu[1] = 1;
for (int i = 2; i < N; i ++ )
{
if (!st[i]) primes[ ++ cnt] = i, mu[i] = -1;
for (int j = 1; j <= cnt && primes[j] * i < N; j ++ )
{
st[primes[j] * i] = true;
if (i % primes[j] == 0) break;
mu[primes[j] * i] = -mu[i];
}
}
}

莫比乌斯反演

对于一些函数 f(n),如果很难直接求出它的值,而容易求出其倍数和或约数和 g(n),那么可以通过莫比乌斯反演简化运算,求得 f(n) 的值.

定义

  • 形式一:

    g(n)=d|nf(d), 则 f(n)=d|nμ(d)g(nd).

  • 形式二:

    g(n)=n|df(d), 则 f(n)=n|dμ(dn)g(d).

问题形式

P1390 公约数的和

给定 n (n2e6), 求 i=1nj=i+1ngcd(i,j).

一些无关但有用的推导

i=1nd|iμ(d)=d=1nndμ(d)

i=1nj=1m[gcd(i,j)=1]
=i=1nj=1md|gcd(i,j)μ(d)
=i=1nj=1md|id|jμ(d)
=i=1nd|ij=1md|jμ(d)
=d=1nndd=1mmdμ(d)
=d=1min(n,m)μ(d)ndmd

i=1nj=1m[gcd(i,j)=1]=d=1min(n,m)μ(d)ndmd
再来看此题

i=1nj=1ngcd(i,j)
=k=1nk×i=1nj=1m[gcd(i,j)=k]

=k=1nk×i=1ndj=1nd[gcd(i,j)=1]

n=nd
结果为

=k=1nk×d=1nμ(d)nd2

运算时需要运用数论分块和前缀和.
结果减去一些多余的即可.

[国家集训队]Crash的数字表格 / JZPTAB

给定 n,m (n,m1e7), 求 i=1nj=1nlcm(i,j).

推导:
k=1min(n,m)i=1nj=1mi×jk[gcd(i,j)=k]

=k=1min(n,m)i=1nkj=1mki×j×k [gcd(i,j)=1]

=k=1min(n,m)i=1nkj=1mki×j×kd|gcd(i,j)μ(d)

=k=1min(n,m)d=1min(nk,mk)i=1nd kj=1md ki×j×k×d2×μ(d)

=k=1min(n,m)k×d=1min(nk,mk)d2×μ(d)×i=1nd kj=1md ki×j


sum(n,m)=d=1min(n,m)d2×μ(d)×i=1ndi=1mdi×j

答案为
k=1min(n,m)k×sum(nk,mk)

数论分块求解即可.

本文作者:kroyosh

本文链接:https://www.cnblogs.com/kroyosh/p/16623546.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kroyosh  阅读(26)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起