首页 > 其他分享 >【学习笔记】数论函数与莫比乌斯反演

【学习笔记】数论函数与莫比乌斯反演

时间:2024-01-17 18:58:11浏览次数:36  
标签:lfloor right 数论 dfrac sum 反演 莫比 displaystyle left

一. 数论函数基础

数论函数:满足值域为整数的函数。

本文下述的数若无特殊说明均为整数。

若无特殊说明则钦定
\(\displaystyle n=\prod_{i=1}^kp_i^{e_i},p_i\in\mathbb{P}\)。\(\mathbb{P}\) 表示质数集合,\(p_i\) 互不相同。

介绍几个常见的数论函数:

\(I(n)\):恒等函数,无论 \(n\) 是多少,其永远等于 \(1\)。

\(\epsilon(n)\):元函数,当 \(n=1\) 是值为 \(1\),否则为 \(0\)。它是狄利克雷卷积的单位元

\(id(n)\):单位函数,无论 \(n\) 是多少,其值永远等于 \(n\)。

\(\varphi(n)\):欧拉函数,表示小于 \(n\) 的整数中与 \(n\) 互质的数的个数。

\(\mu(n)\):莫比乌斯函数,定义后文讲述。

积性函数

定义:对于函数 \(f\),若 \(n\bot m\)(即 \(n,m\) 互质)时有 \(f(nm)=f(n)f(m)\),则函数 \(f\) 为积性函数

完全积性函数:对于函数 \(f\),有任意整数 \(n,m\) 有 \(f(nm)=f(n)f(m)\)。

显然 \(I(n),\epsilon(n),id(n)\) 都是完全积性函数

显然完全积性函数是积性函数中的一种。

积性函数 \(f\) 有很多特殊性质:

  • \(f(1)=1\)

  • \(\displaystyle f(n)=\prod_{i=1}^kf(p_i^{e_i})\)

二. 欧拉函数

欧拉函数 \(\varphi(n)\) 是积性函数且不是完全积性函数。

证明欧拉函数 \(\varphi\) 是积性函数

知乎上这个问题有许多清晰的解法。这里给出其中一种。

首先证明一个重要定理:\(\displaystyle\varphi(n)=n\prod_{i=1}^k(\dfrac{p_i-1}{p_i})\)。

设 \(1\sim n\) 中与 \(n\) 至少有 \(i\) 个相同质数因子的数有 \(F_i(n)\) 个。

显然 \(F_0(n)=n\)。

\(\displaystyle F_1(n)=\sum_{i=1}^k\dfrac{n}{p_i}\)。

\(\displaystyle F_2(n)=\sum_{1\leq i<j\leq k}\dfrac{n}{p_ip_j}\)。

以下同理。

考虑容斥原理,得

\[\varphi(n)=\sum_{i=0}^k(-1)^iF_i(n)=n(1-\sum_{i=1}^k\dfrac{1}{p_i}+\sum_{1\leq i<j\leq k}\dfrac{1}{p_ip_j}-\cdots) \]

容易发现式子即 \(\displaystyle\varphi(n)=n\prod_{i=1}^k(\dfrac{p_i-1}{p_i})\)。

有此定理后证明 \(\varphi(n)\) 是积性函数不难。

设 \(n\bot m\),\(\displaystyle n=\prod_{i=1}^kp_i^{e_i},m=\prod_{i=1}^{k'}q_i^{{E}_i}\)。

\(\therefore \displaystyle\varphi(n)=n\prod_{i=1}^k(\dfrac{p_i-1}{p_i}),\varphi(m)=m\prod_{i=1}^{k'}(\dfrac{q_i-1}{q_i})\)。

\[\begin{aligned}\varphi(nm)&=nm\prod_{i=1}^k(\dfrac{p_i-1}{p_i})\prod_{i=1}^{k'}(\dfrac{q_i-1}{q_i})\\&= nm\prod_{p|nm}\dfrac{p-1}{p}\\&=\varphi(n)\varphi(m)\end{aligned} \]

证毕。

欧拉函数的一些定理:

  • \(\displaystyle\varphi(n)=n\prod_{i=1}^k(\dfrac{p_i-1}{p_i})\)

此定理等同于:\(\displaystyle \varphi(n)=\prod_{p^k||n}p^{k-1}(p-1)\)。

  • \(\varphi(p)=p-1,p\in \mathbb P\)

  • \(n\) 为奇数,\(\varphi(2n)=\varphi(n)\)。

  • \(\varphi(i\times p_j)=\begin{cases}\varphi(i)\varphi(p_j)&p_j\nmid i\\\varphi(i)p_j&p_j\mid i\end{cases}\)

  • \(\displaystyle n=\sum_{d|n}\varphi(d)\)

三. 狄利克雷卷积

对于两个数论函数 \(f(n),g(n)\),其狄利克雷卷积写作 \((f*g)(n)\),其中 \(f*g\) 可以看作是函数名称。

定义:\(\displaystyle (f*g)(n)=\sum_{d|n}f(d)g(\dfrac{n}{d})\)。

显然狄利克雷卷积满足交换律、结合律、分配律。

  • 积性函数的狄利克雷卷积也是积性函数

设 \(f,g\) 为积性函数,\(\displaystyle h(n)=\sum_{d|n}f(d)g(\dfrac{n}{d})\)。

设 \(n,m,n\bot m\)。

\[h(n)h(m)=\sum_{a|n}f(a)g(\dfrac{n}{a})\sum_{b|m}f(b)g(\dfrac{m}{b})=\sum_{a\mid n}\sum_{b\mid m}f(a)f(b)g(\dfrac{n}{a})g(\dfrac{m}{b}) \]

\(\because n\bot m,\therefore \forall a|n,\forall b|m,a\bot b\)。

\[\because a\bot b,\therefore \{a:a\mid n\}\cup \{b:b\mid m\}=\{d:d\mid nm\} \]

\(\displaystyle h(n)h(m)=\sum_{a|n}\sum_{b|m}f(ab)g(\dfrac{nm}{ab})=\sum_{d|nm}f(d)g(\dfrac{nm}{d})=h(nm)\)。

证毕。

  • 积性函数的逆也是积性函数

逆:当 \(f*g=\epsilon\),\(f,g\) 互逆。

令 \(f\) 为积性函数,欲证 \(\forall n\bot m,g(nm)=g(n)g(m)\)。

考虑数学归纳法。

  1. \(nm=1\)

\(g(1)=1\),显然成立。

  1. \(nm>1\)

钦定当 \(n'm'<nm\) 时结论成立。

\[\begin{aligned}g(nm)&=\sum_{d|nm}f(d)g(\dfrac{nm}{d})-\sum_{d\mid nm,d\neq1}f(d)g(\dfrac{nm}{d})\\&=\epsilon(nm)-\sum_{d\mid nm,d\neq1}f(d)g(\dfrac{nm}{d})\\&=-\sum_{d|nm,d\neq1}f(d)g(\dfrac{nm}{d})\\&=-\sum_{a|n,b|m,ab\neq1}f(ab)g(\dfrac{nm}{ab})\\&=-\sum_{a|n,b|m,ab\neq1}f(a)f(b)g(\dfrac{n}{a})g(\dfrac{m}{b})\\&=f(1)f(1)g(n)g(m)-\sum_{a|n,b|m}f(a)f(b)g(\dfrac{n}{a})g(\dfrac{m}{b})\\&=g(n)g(m)-\left(\sum_{a|n}f(a)g(\dfrac{n}a)\right)\left(\sum_{b|m}f(b)g(\dfrac{m}{b})\right)\\&=g(n)g(m)-\epsilon(n)\epsilon(m)\\&=g(n)g(m)\end{aligned} \]

证毕。

四. 莫比乌斯反演

定义 \(I^{-1}\)(\(I\) 的逆)是 \(\mu\)。

那么若有 \(g=f*I\),得 \(f=g*\mu\)。

将其换一种写法,即得:

  • 莫比乌斯反演:若 \(\displaystyle g(n)=\sum_{d|n}f(d)\),有 \(\displaystyle f(n)=\sum_{d|n}g(d)\mu(\dfrac{n}{d})\)。反之亦然。

那么考虑如何求出 \(\mu(n)\)。

由于 \(\mu\) 是 \(I\) 的逆,而 \(I\) 是积性函数,所以 \(\mu\) 也是积性函数。

显然得出 \(\mu(p^k)=\begin{cases}1&k=0\\-1&k=1\\0&k>1\end{cases}\)。

推广到一般数上,得:莫比乌斯函数 \(\mu(n)=\begin{cases}1&n=1\\0& \exists i\in[1,k],e_i>1\\(-1)^k &\text{otherwise}\end{cases}\)。

通过莫比乌斯反演有许多结论:

  • \(\displaystyle I(n)=\sum_{d|n}\epsilon(d)\Leftrightarrow \epsilon(n)=\sum_{d|n}\mu(d)\)

  • \(\displaystyle id(n)=\sum_{d|n}\varphi(d)\Leftrightarrow \varphi(n)=\sum_{d|n}\mu(\dfrac{n}{d})d\)

  • \(\varphi(n) *I(n)=id(n)\)

  • 倍数莫比乌斯反演:若 \(\displaystyle g(n)=\sum_{n|d}f(d)\),有 \(\displaystyle f(n)=\sum_{n|d}g(d)\mu(\dfrac{d}{n})\)。

定义 \(\displaystyle (f\oplus g)(n)=\sum_{n|d}f(d)g(\dfrac{d}{n})\),易得 \((f*g)\oplus h=f\oplus (g\oplus h)\)。

那么 \(f=(\mu*I)\oplus f=\mu\oplus(I\oplus g)=\mu \oplus g\)。

五. 数论分块

求 \(\displaystyle \sum_{i=1}^n k\%i\)。

显然 \(k\%i=k-i\left\lfloor\dfrac{k}{i}\right\rfloor\)。

考虑一个问题:求 \(\displaystyle \sum_{i=1}^nf(i)\left\lfloor\dfrac{n}{i}\right\rfloor\)。(\(f(i)\) 为某数论函数)

显然 \(\left\lfloor\dfrac{n}{i}\right\rfloor\) 只有 \(2\sqrt n\) 种不同取值。

那么有 \(O(\sqrt n)\) 个块,对于每个块中所有数都相同。考虑对于同一块中两个数 \(\left\lfloor\dfrac{n}{i}\right\rfloor\) 与 \(\left\lfloor\dfrac{n}{j}\right\rfloor\),\(j\) 的最大值是 \(\left\lfloor\dfrac{n}{\left\lfloor\dfrac{n}{i}\right\rfloor}\right\rfloor\)。(也就是块长。)

所以对于一个块知道左端点就可以求出右端点。

而对于块 \([l,r]\) 贡献显然是 \(\displaystyle \sum_{i=l}^rf(i)\left\lfloor\dfrac{n}{l}\right\rfloor\)。

对于 \(f(i)\) 处理一个前缀和即可。

六. 莫反具体应用

求 \(1\le i,j\le n\) 且 \(\gcd(i,j)\in \mathbb P\) 的数对 \((i,j)\) 个数。


\[\begin{aligned}\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)\in\mathbb P]&=\sum_{k\in \mathbb P}\sum_{i=1}^{\left\lfloor\frac{n}{k}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{n}{k}\right\rfloor}\epsilon(\gcd(i,j))&\text{将 i,j 除以 gcd 后枚举gcd} \\&=\sum_{k\in \mathbb P}\sum_{i=1}^{\left\lfloor\frac{n}{k}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{n}{k}\right\rfloor}\sum_{d|\gcd(i,j)}\mu(d)&\text{莫比乌斯反演}\\&=\sum_{k\in \mathbb P}\sum_{d=1}^{\left\lfloor\frac{n}{k}\right\rfloor}\mu(d)\sum_{i=1}^{\left\lfloor\frac{n}{dk}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{n}{dk}\right\rfloor}1\\&=\sum_{k\in \mathbb P}\sum_{d=1}^{\left\lfloor\frac{n}{k}\right\rfloor}\mu(d)\left\lfloor\frac{n}{dk}\right\rfloor^2\\&=\sum_{t=1}^n\sum_{k|t,k\in \mathbb P}\mu (\frac{t}k)\left\lfloor\frac{n}{t}\right\rfloor^2&\text{t 表示dk}\\&=\sum_{t=1}^n\left\lfloor\frac{n}{t}\right\rfloor^2 \sum_{k|t,k\in \mathbb P}\mu(\frac{t}k)\end{aligned} \]

然后对于 \(\displaystyle \sum_{k|t,k\in \mathbb P}\mu(\frac{t}k)\) 设其等于 \(f(t)\),那么 \(f(t)\) 可以在 \(O(n\ln n)\) 内预处理。

而 $\displaystyle \sum_{t=1}n\left\lfloor\frac{n}{t}\right\rfloor2 $ 使用数论分块 \(O(\sqrt n)\)。

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N=1e7+8;

int n,s[N],p[N],mu[N],ans,cnt;
bool vis[N];

inline void init(){
	mu[1]=1;
	for(int i=2;i<=n;i++){
		if(!vis[i]){
			p[++cnt]=i;
			mu[i]=-1;
		}
		for(int j=1;j<=cnt,i*p[j]<=n;j++){
			vis[i*p[j]]=1;
			if(i%p[j]==0)break;
			mu[i*p[j]]=-mu[i];
		}
	}
	return;
}

signed main(){
	scanf("%lld",&n);
	init();
	for(int i=1;i<=cnt;i++)for(int j=1;j*p[i]<=n;j++)s[j*p[i]]+=mu[j];
	for(int i=2;i<=n;i++)s[i]+=s[i-1];
	for(int i=1;i<=n;i++){
		int l=i,r=(n/(n/l));
		ans+=(s[r]-s[l-1])*(n/l)*(n/l);
		i=r;
	}
	printf("%lld",ans);
	return 0;
}

对于给出的 \(n\) 个询问,每次求有多少个数对 \((x,y)\),满足 \(a \le x \le b\),\(c \le y \le d\),且 \(\gcd(x,y) = k\)。


首先考虑一个弱化问题:将 \(a,c\) 变为 \(1\)。设此答案为 \(F(b,d)\)。

那么答案显然为 \(F(b,d)-F(b,c-1)-F(a-1,d)+F(a-1,c-1)\)。

那么问题转化为求 \(\displaystyle \sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]\)。

那么这个也就是类似上一题。

设 \(d(x)\) 为 \(x\) 的约数个数,给定 \(n,m\),求

\[\sum_{i=1}^n\sum_{j=1}^md(ij) \]


显然有个公式 \(\displaystyle d(ij)=\sum_{x|i}\sum_{y|j}\epsilon(\gcd(x,y))\)。

所求即为 \(\displaystyle \sum_{i=1}^n\sum_{j=1}^n\sum_{x|i}\sum_{y|j}\epsilon(\gcd(x,y))=\sum_{i=1}^n\sum_{j=1}^m\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{j}\right\rfloor\epsilon(\gcd(i,j))\)

那么设 \(\displaystyle f(x)=\sum_{i=1}^n\sum_{j=1}^m\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{j}\right\rfloor[\gcd(i,j)=x],g(x)=\sum_{x|d}f(d)\)。

答案即为 \(f(1)\)。

\[\begin{aligned}\therefore g(x)&=\sum_{i=1}^n\sum_{j=1}^m\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{j}\right\rfloor\sum_{x|d}[\gcd(i,j)=d]\\&=\sum_{i=1}^n\sum_{j=1}^m\left\lfloor\frac{n}{i}\right\rfloor\left\lfloor\frac{m}{j}\right\rfloor[x\mid \gcd(i,j)]\\&=\sum_{i=1}^{\left\lfloor\frac{n}{x}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{x}\right\rfloor}\left\lfloor\frac{n}{ix}\right\rfloor\left\lfloor\frac{m}{jx}\right\rfloor\end{aligned} \]

根据倍数莫比乌斯反演,有 \(\displaystyle f(x)=\sum_{x|d}g(d)\mu(\frac{d}{x})\)。

\[\therefore f(1)=\sum_{d}g(d)\mu(d) \]

注意到当 \(d>n\) 时 \(g(d)\) 为 \(0\),所以 \(d\) 枚举到 \(n\)。

\[f(1)=\sum_{d=1}^ng(d)\mu(d) \]

\(g(x)\) 使用数论分块做完。

//O(2)
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N=1e5;

int T,n,m,s[N],p[N],mu[N],cnt,k,ans;
bool vis[N];

inline void init(){
	mu[1]=1;
	for(int i=2;i<N;i++){
		if(!vis[i]){
			p[++cnt]=i;
			mu[i]=-1;
		}
		for(int j=1;j<=cnt,i*p[j]<N;j++){
			vis[i*p[j]]=1;
			if(i%p[j]==0)break;
			mu[i*p[j]]=-mu[i];
		}
	}
	for(int i=1;i<N;i++)mu[i]+=mu[i-1];
	for(int i=1;i<N;i++){
		int res=0;
		for(int I=1,j;I<=i;I=j+1){
			j=i/(i/I);
			res+=(j-I+1)*(i/I);
		}
		s[i]=res;
    }
	return;
}

signed main(){
	init();
	scanf("%lld",&T);
	while(T--){
		scanf("%lld%lld",&n,&m);
		if(n>m)swap(n,m);
		for(int i=1;i<=n;i++){
			int l=i,r=min(n/(n/i),m/(m/i));
			ans+=(mu[r]-mu[l-1])*s[n/l]*s[m/l];
			i=r;
		}
		printf("%lld\n",ans);
		ans=0;
	}
	return 0;
}

标签:lfloor,right,数论,dfrac,sum,反演,莫比,displaystyle,left
From: https://www.cnblogs.com/trsins/p/17970747

相关文章

  • 【数学/数论】欧拉函数 - Phi
    引言自Mr.果讲了CF1900D之后,决定复习n月之前学习的知识:欧拉函数。\[\Large{{一、\underline{定义}}}\]\[\scriptsize\mathsf{一切的开始}\]欧拉函数,即\(\varphi(x)\)。\[\varphi(x)=\sum_{i=1}^{x}[\gcd(x,i)=1]\]它表示小于等于\(x\)的数中,与\(x\)......
  • 数论好题 CF900D
    前置推导令\(b_1=\frac{a_1}{x},b_2=\frac{a_2}{x},\dots,b_n=\frac{a_n}{x}\)。很显然\(b_i\)为整数,且\(b\)数组的全部元素互质,即\(gcd(b_1,b_2,b_3,\dots,b_n)=1\)。因为\[\sum_{i=1}^{n}a_i=y\]所以\[x\times\sum_{i=1}^{n}b_i=y\]\[\sum_{i=......
  • 数论好题 CF900D
    前置推导令\(b_1=\frac{a_1}{x},b_2=\frac{a_2}{x},\dots,b_n=\frac{a_n}{x}\)。很显然\(b_i\)为整数,且\(b\)数组的全部元素互质,即\(gcd(b_1,b_2,b_3,\dots,b_n)=1\)。因为\[\sum_{i=1}^{n}a_i=y\]所以\[x\times\sum_{i=1}^{n}b_i=y\]\[\sum_{i=......
  • 【算法】莫比乌斯反演
    参考博客OI-Wiki|Biuld-数学|Million-组合计数学习笔记|狄利克雷卷积和莫比乌斯反演|算法学习笔记(35):狄利克雷卷积狄利克雷卷积莫反的前置知识,主要引入了一个新运算。常用积性函数单位函数\(\varepsilon(n)=\begin{cases}1&n=1\\0&\text{otherwise}\end{cases}......
  • 【做题笔记】数论做题笔记
    前言题目来源初等数论学习IEuclidProblem:板题,用\(exgcd\)求出的两个解就是\(|x|+|y|\)最小的整数解【模板】二元一次不定方程(exgcd):板题GiftDilemma:将方程变为\(ax+by\equivp-cz\),枚举\(c\)前的系数,若\(n=\frac{p}{c}\),那么时间复杂度为\(O(Tn\logn)\)[POI20......
  • Landsat 7大气校正法的地表温度反演:ENVI实现
    本文介绍基于ENVI软件,实现对Landsat7遥感影像加以大气校正方法的地表温度反演操作。(基于ENVI的Landsat7地表温度(LST)大气校正方法反演与地物温度分析)1图像前期处理与本文理论部分更新:基于GEE的地表温度Landsat反演可以看谷歌地球引擎GEE批量计算Landsat地表温度,自动批量操作......
  • 数论结论 总结
    数论结论总结小结论\(1\simn\)的因数总共有\(O(n\logn)\)个,调和级数证明。\[\varphi(ij)\varphi(\gcd(i,j))=\varphi(i)\varphi(j)\gcd(i,j)\]\[d(ij)=\sum_{x|i}\sum_{y|j}[\gcd(x,y)=1]\\d(ijk)=\sum_{x|i}\sum_{y|j}\sum_{z|k}[\gcd(x......
  • 各类反演总结
    反演就是有两个函数\(f\)和\(g\),可以简单得出\(g\)转化成\(f\)的式子,那么就可以从\(f\)推回\(g\)。内容:子集反演二项式反演莫比乌斯反演欧拉反演斯特林反演子集反演若\(f(S)=\sum_{T\inS}g(T)\),那么\(g(S)=\sum_{T\inS}(-1)^{|S|-|T|}......
  • 快速数论变换 | NTT 初学
    快速数论变换|NTT初学前置FFT原根阶:称满足同余方程\(a^x\equiv1\modm\)的最小正整数解\(x\)为\(a\)的模\(m\)的阶,记为\(Ord_ma\)。观察到本质就是最短循环节,同时该同余方程类似于欧拉定理:\[a^{\varphi(m)}\equiv1\modm,a\botm\]那么显然两者的关系是......
  • Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)
    C.NumberGame我们考虑那些状态是必胜态我的回合时n为奇数(除1外),直接除以n则必胜下面偶数的情况稍复杂偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败态偶数一定含2的因子,\(n=2^k*q,q为奇数\)当\(k=1时如果q\)是一个质数那么只能除一次q这样......