莫比乌斯反演试水
1. 数论分块
大概是求一堆与 \(\left\lfloor\dfrac{n}{i}\right\rfloor\) 有关的东西。
因为有很多 \(\left\lfloor\dfrac{n}{i}\right\rfloor\) 是相等的,所以可以在 \(\sqrt{n}\) 的复杂度中求和。
设当前区间为 \([l,r]\),那么可以表示为 \([l,\left\lfloor\dfrac{n}{\lfloor\dfrac{n}{l}\rfloor}\right\rfloor]\) 。
每次计数即可。
下面给出直接求和的代码:
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n;
signed main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
int l=1,r=0,ans=0;
while(l<=n)
{
r=n/(n/l);
ans+=(r-l+1)*(n/l);
l=r+1;
}
printf("%lld\n",ans);
}
return 0;
}
2.狄利克雷卷积
定义
对于两个数论函数 \(f(x)\) 和 \(g(x)\),狄利克雷卷积的结果 \(h(x)\) 为:
\[h(x)=\sum\limits_{d|x}f(x)g(\dfrac{x}{d})=\sum\limits_{ab=x}f(a)g(b)
\]
简记为:
\[h=f *g
\]
满足交换律,结合律,分配律。
单位元
单位元,即为 \(\varepsilon\) ,满足对于任意一个数论函数 \(f\),都有 \(f*\varepsilon=f\)。
\[\varepsilon(n)=[n=1]
\]
3.莫比乌斯函数
定义
\(\mu\) 为莫比乌斯函数,定义为:
\[\mu(n)=\begin{cases}1&&n=1\\0&&n有平方因子\\(-1)^k&&k为n的本质不同的质因子个数\end{cases}
\]
求法:
点击查看代码
inline void getmu()
{
mu[1]=1;
for(register int i=2;i<=n;i++)
{
if(!vis[i])p[++tot]=i,mu[i]=-1;
for(register int j=1;j<=tot&&i*p[j]<=n;j++)
{
vis[i*p[j]]=1;
mu[i*p[j]]=-mu[i];
if(i%p[j]==0)
{
mu[i*p[j]]=0;
break;
}
}
}
}
性质
莫比乌斯函数是积性函数,且满足下面的性质:
\[\sum\limits_{d|n}\mu(d)=\begin{cases}1&&n=1\\0&&n\ne 1\end{cases}\\
\]
也就是说:
\[\sum\limits_{d|n}\mu(d)=\varepsilon(n)\\
\mu*1=\varepsilon
\]
然后再把 \(\varepsilon(n)\) 展开得到:
\[\sum\limits_{d|n}\mu(d)=[n=1]
\]
反演结论
\[[\gcd(i,j)=1]=\sum\limits_{d|\gcd(i,j)}\mu(d)
\]
就是把上面那个 \(n\) 变成 \(\gcd(i,j)\) 即可。
神秘推公式部分
- \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[\gcd(i,j)=k]\)
整体除一个 \(k\),变成如下式子:
\[\sum\limits_{i=1}^{\left\lfloor\frac{n}{k}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{m}{k}\right\rfloor}[\gcd(i,j)=1]
\]
接着套用反演结论:
\[\sum\limits_{i=1}^{\left\lfloor\frac{n}{k}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{m}{k}\right\rfloor}\sum\limits_{d|gcd(i,j)}\mu(d)
\]
然后把枚举 \(d\) 放到前面来:
\[\sum\limits_{d=1}^{n}\mu(d)\sum\limits_{i=1}^{\left\lfloor\frac{n}{k}\right\rfloor}[d|i]\sum\limits_{j=1}^{\left\lfloor\frac{m}{k}\right\rfloor}[d|j]
\]
易知 \(1\sim \left\lfloor\dfrac{n}{k}\right\rfloor\) 中 \(d\) 的倍数为 \(\left\lfloor\dfrac{n}{dk}\right\rfloor\) 个,所以式子可以化为:
\[\sum\limits_{d=1}^{\min(\left\lfloor\frac{n}{k}\right\rfloor,\left\lfloor\frac{m}{k}\right\rfloor)}\mu(d)\left\lfloor\dfrac{n}{dk}\right\rfloor\left\lfloor\dfrac{m}{dk}\right\rfloor
\]

浙公网安备 33010602011771号