莫比乌斯反演试水

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)\) 即可。

神秘推公式部分

  1. \(\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 \]

posted @ 2022-06-23 22:04  yzh_Error404  阅读(31)  评论(0)    收藏  举报