首页 > 其他分享 >莫比乌斯反演(套路集合)

莫比乌斯反演(套路集合)

时间:2024-07-30 20:10:19浏览次数:4  
标签:lfloor frac 套路 dfrac sum rfloor mu 反演 莫比

数论

只有几道套路题,严谨证明请转 oi-wiki

预处理

数论分块

简单来说就是求:

\[\sum_{i=1}^{n}{\lfloor \frac{n}{i} \rfloor} \]

因为 \(\lfloor \frac{n}{i} \rfloor\) 最多有 \(2 \sqrt{n}\) 个取值,所以我们可以枚举答案,复杂度 \(O(\sqrt{n})\)。

  • 证明:\(\forall d \in [1,n]\)
    1. 考虑 \(d \le \sqrt{n}\),因为 \(d\) 只有 \(\sqrt{n}\) 种,所以最多只会有 \(\sqrt{n}\) 种。
    2. 考虑 \(d \ge \sqrt{n}\),因为 \(\lfloor \frac{n}{d} \rfloor\) 小于 \(\sqrt{n}\),所以答案不会超过\(\sqrt{n}\) 种。
    3. 综上,\(\forall d \in [1,n]\),\(\lfloor \frac{n}{i} \rfloor\) 最多有 \(2 \sqrt{n}\)
  • 证毕(根号分治初步应用?)

易证,\(\lfloor \frac{n}{i} \rfloor\) 取值相同的一段的左右端点分别为 \(\lfloor \frac{n}{i} \rfloor ,\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor\)。

  • 证明:设 \(r\) 为极大的满足 \(\lfloor \frac{n}{l} \rfloor=\lfloor \frac{n}{r} \rfloor\) 的值。

\(\begin{cases} \lfloor \dfrac{n}{l} \rfloor \le \dfrac{n}{r} \\ \lfloor \dfrac{n}{l} \rfloor \gt \dfrac{n}{r+1} \end{cases}\) $\Longrightarrow $ \(\begin{cases} \dfrac{n}{\lfloor \dfrac{n}{l} \rfloor} \ge \dfrac{n}{\dfrac{n}{r}} \\ \dfrac{n}{\lfloor \dfrac{n}{l} \rfloor} \lt \dfrac{n}{\dfrac{n}{r+1}} \end{cases}\) $\Longrightarrow $ \(r \le \dfrac{n}{\lfloor \dfrac{n}{l} \rfloor} \lt r+1\)

\(\because r \in \mathbb{Z},\ \therefore r \le \lfloor \frac{n}{\lfloor \frac{n}{l} \rfloor} \rfloor\)。

  • 证毕

例题:余数求和

#include<bits/stdc++.h>
using namespace std;
#define LL long long
LL n,ans;

int main()
{
	// freopen("in.in","r",stdin);
	// freopen("out.out","w",stdout);
	scanf("%lld",&n);
	for(int l=1,r;l<=n;l=r+1)
	{
		r=n/(n/l);
		ans+=1ll*(r-l+1)*(n/l);//这里求个数,所以是 r-l+1,根据题意替换成不同函数的区间和
	}
	printf("%lld\n",ans);
	return 0;
}

线性筛

线性筛最大的用处不只是线性求素数,而是筛积性函数

几乎只要是积性函数,找到性质我们就可以筛。

积性函数:函数 \(f(x)\) 满足 \(\forall gcd(a,b)=1,f(a \times b)=f(a) \times f(b)\)

举例说明:

筛 $\mu$
mu[1]=1;
for(int i=2;i<N;i++)
{
	if(!vs[i]) p[++p[0]]=i,mu[i]=-1;
	for(int j=1;j<=p[0]&&i*p[j]<N;j++)
	{
		vs[i*p[j]]=1;
		if(i%p[j]==0)
		{
			mu[i*p[j]]=0; break;
		}
		mu[i*p[j]]=-mu[i];
	}
}
筛 $\phi$
phi[1]=1;
for(LL i=2;i<=n;i++) 
{
	if(!vs[i]) p[++p[0]]=i,phi[i]=i-1;
	for(LL j=1;j<=p[0]&&i*p[j]<=n;j++)
	{
		vs[i*p[j]]=1;
		if(i%p[j]==0)
		{
			phi[i*p[j]]=phi[i]*p[j]; break;
		}
		phi[i*p[j]]=phi[i]*(p[j]-1);
	}
}
筛 $i^k$
F[1]=1;
for(int i=2;i<=n;i++)
{
	if(!vs[i]) F[i]=qpow(i,k),p[++p[0]]=i;
	for(int j=1;j<=p[0]&&i*p[j]<=n;j++)
	{
		vs[p[j]*i]=1; F[i*p[j]]=F[i]*F[p[j]]%mod;
		if(i%p[j]==0) break;
	}
}
筛 $f(n) = \sum_{d|n}d \mu^2(d)\mu(\frac{n}{d})$
f[1]=1;
for(int i=2;i<=n;i++)
{
	if(!vs[i]) f[i]=i-1,p[++p[0]]=i;
	for(int j=1;j<=p[0]&&i*p[j]<=n;j++)
	{
		vs[p[j]*i]=1;
		if(i%p[j]==0)
		{
			if((i/p[j])%p[j]) f[i*p[j]]=(mod-p[j])*f[i/p[j]]%mod;
			break;
		}
		f[p[j]*i]=f[i]*(p[j]-1)%mod;
	}
}
筛 $g(d)=\sum_{i|d} \mu(\frac d i)* i^{k}$
g[1]=1;
for(int i=2;i<N;i++)
{
	if(!vs[i]) p[++p[0]]=i,g[i]=(qpow(i,k)+mod-1)%mod;
	for(int j=1;j<=p[0]&&p[j]*i<N;j++)
	{
		vs[i*p[j]]=1;
		if(i%p[j]==0)
		{
			g[i*p[j]]=g[i]*(g[p[j]]+1)%mod;
			break;
		}
		g[i*p[j]]=g[i]*g[p[j]]%mod;
	}
}

这几天做的都放这里了。。。长得都差不多,以后有时间把推导写了,没时间先咕着。

常见的积性函数就几个,一堆积性函数的狄利克雷卷积的形式也是积性函数,就像最后两个例子。

对于这些复合的函数性质自己推,主要分别找质数时的计算式,然后推到非质数上。

推导

(性质的证明在最后)

公约数的和 为例。

求:

\[ans=\sum_{i=1}^{n}\sum_{j=i+1}^{n}gcd(i,j) \]

先转化成:

\[ans=2 \times \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) - \frac{(n+1) \times n}{2} \]

目标就是求:

\[ans=\sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \]

先枚举 \(d=gcd(i,j)\):

\[ans=\sum_{d=1}^{n}d\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)=d] \]

然后我们发现后面一坨要求 \((d \mid i) \land (d \mid j)\),所以我们直接令 \(i,j\) 除 \(d\),剩下的:

\[ans=\sum_{d=1}^{n}d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}[gcd(i,j)=1] \]

根据莫比乌斯函数的性质:\(\sum_{d \mid n} \mu(d)=[n=1]\),进行代换:

\[ans=\sum_{d=1}^{n}d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{e \mid gcd(i,j)} \mu(e) \]

枚举 \(e\),\(i,j\) 是 \(e\) 的倍数:

\[ans=\sum_{d=1}^{n}d\sum_{e=1}^{n}\mu(e)\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}[e \mid i]\sum_{j=1}^{\lfloor \frac{n}{d} \rfloor}[e \mid j] \]

后面一坨就是求 \([1,n]\) 中多少 \(i\) 是 \(e\) 的倍数,显然有 \(\lfloor \frac{n}{ed} \rfloor\):

\[ans=\sum_{d=1}^{n}\sum_{e=1}^{\lfloor \frac{n}{d} \rfloor}\mu(e)d\lfloor \frac{n}{ed} \rfloor\lfloor \frac{n}{ed} \rfloor \]

设 \(T=ed\),枚举 \(T\) 和 \(T\) 的因数 \(d\):

\[ans=\sum_{T=1}^{n}\lfloor \frac{n}{ed} \rfloor\lfloor \frac{n}{ed} \rfloor\sum_{d \mid T}\mu(\frac{T}{d})d \]

根据性质 \(\sum_{d \mid n}\mu(\frac{n}{d})d=\varphi(n)\)

\[ans=\sum_{T=1}^{n}\lfloor \frac{n}{ed} \rfloor\lfloor \frac{n}{ed} \rfloor\varphi(T) \]

现在我们就得到了一个复杂度很优的式子,后面的 \(\varphi(T)\) 可以筛出来求前缀和,前面的数论分块。
预处理 \(O(n)\),查询 \(O(\sqrt{n})\)。

性质证明

上文提到两个性质的证明:

  • 证明:\(\sum_{d \mid n} \mu(d)=[n==1]\)
    考虑 \(\mu(d)\) 的定义:

\[\mu(d)= \begin{cases} 1 \quad (n=1) \\ 0 \quad n含有平方因子 \\ (-1)^k \quad n 含有 k 个不同的质因子 \end{cases}\]

  1. \(n=1\) 显然 \(\sum_{d \mid n} \mu(d)=1\)。
  2. \(n>1\),根据唯一分解定理:$$n=\prod_{i}p_i^{c_i}$$
    对于具有平方因子的 \(d\),也就是 \(c_i \gt 1\),\(\mu(d)\)不用考虑,
    对于剩下的,就是在 \(k\) 个因子中任选若干个组成 \(d\):$$\sum_{r=1}^{k} (-1)^r C_{k}^{r} $$
    二项式定理展开:$$(1+(-1))^k=0$$
  3. 综上,当且仅当 \(n=1\) 时,\(\sum_{d \mid n} \mu(d)=1\)
  • 证毕

  • 证明:\(\sum_{d \mid n}\mu(\frac{n}{d})d=\varphi(n)\)
    莫比乌斯反演套欧拉反演,很显然。(施工中。。。)

(其实这个道题用欧拉反演更方便,具体过程不展开,都差不多。)

标签:lfloor,frac,套路,dfrac,sum,rfloor,mu,反演,莫比
From: https://www.cnblogs.com/ppllxx-9G/p/18333095

相关文章

  • 莫比乌斯反演
    由于一道题目用到了莫反,所以学了一下,赶紧隔了好几天才想起来记下来。STO忘忧老师是神!!!/bx/bx/bx莫比乌斯反演前置芝士:莫比乌斯函数:\(\mu\)为莫比乌斯函数,定义为:\[设:\n=\prod_{i=1}^{k}p_i^{c_i}\\则:\mu(n)=\begin{cases}1&n=1\\0&\existc_i>1\\(-1)^k&\forallc......
  • 莫比乌斯反演
    数列分块常与数列分块连用向下取整括号一定要加对 intEnd=0,N=a/d,M=b/d; if(N<M)swap(N,M); for(intStart=1;Start<=M;Start=End+1) { End=min(N/(N/Start),M/(M/Start));//注意边界 ans+=(sum[End]-sum[Start-1])*(longlong)(N/Start)*(M/Start);//注意括号......
  • 莫比乌斯反演
    莫比乌斯反演前置芝士:数论分块求\(\sum\limits_{i=1}^n\lfloor\frac{n}{i}\rfloor\),其中\(n\le10^{12}\)。可以发现,\(\lfloor\frac{n}{i}\rfloor\)最多只有\(\sqrt{n}\)种取值,所以只需要枚举每种取值对应\(i\)的取值范围即可。llans=0;for(inti=1,j;i<=n;i=......
  • ABC361F x=a^b(容斥,莫比乌斯反演)
    题意求\(1\)~\(n\)中有多少数\(x\)可以写成\(x=a^b\)的形式(其中\(b\ge2\))\(n\le10^{18}\)容斥显然\(1\)是可以写成\(1^b\)的,我们单独讨论这种情况,以下默认\(a\ge2\)发现一个数有可能有很多种\(a^b\)的写法,比如\(64=2^6=4^3=8^2\)显然当\(b\)不是质数......
  • 空间反演对称性 (Spatial Inversion Symmetry) 和非线性响应 (Non-linear Response)
    我们定义一次宇称变换(paritytransformation)为反转所有坐标:\[\mathcal{P}:\begin{pmatrix}x\\y\\z\end{pmatrix}\rightarrow\begin{pmatrix}-x\\-y\\-z\end{pmatrix}\]如果在一维世界中,宇称变换就像是透过“镜子”看这个世界;在三维世界中,则是将全部体系对于......
  • 容易的多元拉格朗日反演练习题
    你说得对,但确实和题目没有一点关系。模拟赛记录下午出。题面看到Alice和Bob就知道是什么题了。思路这个题开始先胡乱想想,发现按照博弈论的思路,那么每次Bob行动一步后,Alice需要有对应的策略,也就是说,若Alice必胜,这次行动应该是固定的最优策略步。然后再代入一下,如果......
  • 莫比乌斯函数与莫比乌斯反演
    9.莫比乌斯函数与莫比乌斯反演9.1莫比乌斯函数9.1.1定义设\(\mu\)为莫比乌斯函数,则有:\[\mu(x)=\begin{cases}1\qquad(n=1)\\0\qquad(∃\i\(ki=x,k\inZ\rightarrow\sqrt{i}\inZ))\\(-1)^{\sum_{i\inprime}[i\midx]}\end{cases}\]直观地说,只要\(x\)的某个质......
  • Solution Set - 容斥原理/二项式反演
    https://www.becoder.com.cn/contest/5400「BZOJ2863」愤怒的元首题目就是求\(n\)个点DAG的数量。设\(dp_i\)表示\(i\)个点的DAG数量。首先DAG一定存在出度为\(0\)的点,其次删去出度为\(0\)的点,仍构成一个DAG。所以我们可以枚举删去的数量,从而划分子问题。......
  • 基于Python星载气溶胶数据处理与反演分析
    在当前全球气候变化和环境污染问题日益突出的背景下,气溶胶研究显得尤为重要。气溶胶在大气中由直径范围在0.01微米至10微米固体和液体颗粒构成,直接或间接影响地球辐射平衡、气候变化和空气质量。尤其在“碳中和”目标的驱动下,研究气溶胶对“碳中和”的气候影响及其环境效应,不仅......
  • 【笔记】Set - 容斥原理/二项式反演
    https://www.becoder.com.cn/contest/5400「BZOJ2863」愤怒的元首题目就是求\(n\)个点DAG的数量。设\(dp_i\)表示\(i\)个点的DAG数量。首先DAG一定存在出度为\(0\)的点,其次删去出度为\(0\)的点,仍构成一个DAG。所以我们可以枚举删去的数量,从而划分子问题。......