Loading

省选数论总结

@

前言

此篇仅供个人学习总结使用

常见符号及其意义

  1. \(a\mid b\)表示\(a\)\(b\)的约数
  2. \(\lfloor \frac{a}{b} \rfloor\),表示\(a\)除以\(b\)下取整
  3. \(\prod \limits ^a_{i=1}p_i\)表示\(p_1,p_2,...p_n\)的乘积
  4. \(\sum \limits ^n_{i=1}a_i\)表示\(a_1,a_2,..a_n\)的和
  5. \(a \equiv b \pmod p\)表示\(a\)\(b\)\(p\)的结果是相同的
  6. \(\sum\limits_{d\mid n}\)表示枚举\(n\)的所有因子\(d\)
  7. \(f \times g(x)\)表示\(f\)函数与\(g\)函数的狄利克雷卷积
  8. \(\int_a^b f(x)dx\)表示定积分
  9. \(f(x)=[x=1]\)表示\(f(x)\)只有在\(x=1\)的时候才为\(1\),其他情况为\(0\)

数论函数

数论函数是定义域为正整数的函数,又叫做算数函数

积性函数

1. 定义

对于一个数论函数\(f(n)\),如果\(a\),\(b\)互质,\(f(ab)=f(a)f(b)\),那么\(f(n)\)为积性函数.特殊的,如果对于任意的\(a,b\)都有\(f(ab)=f(a)f(b)\),那么\(f(n)\)为完全积性函数

2.常见的积性函数

  1. 欧拉函数\(\phi(n)\)
  2. 莫比乌斯函数\(\mu(n)\)
  3. 幂函数(完全积性)\(f_k(n)=n^k\)
  4. 除数函数\(\sigma_xn=\sum\limits_{d\mid n}d^x\),即所有因子的\(x\)次幂之和.特殊的,当\(x=0\)的时候表示约数的个数,当\(x=1\)的时候表示约数之和
  5. 单位函数(完全积性)\(id(n)=n\)
  6. 元函数(完全积性)\(e(n)=[n=1]\)
  7. 恒等函数(完全积性)\(I(n)=1\)

3.利用线性筛预处理普通的积性函数

积性函数一般可以利用线性筛预处理,如莫比乌斯函数、欧拉函数等.
积性函数满足\(f(n)=\prod_{p_i}f(p_i^{k_i})\),线性筛的时候一般分为两种情况:

  1. 新增加了一种质因子,直接用定义即可
  2. 最小质因子的幂次增加1,根据具体题目具体分析

    假设\(f\)函数为积性函数\(f(n)=\sum_{d\mid n}d\)\((f\)为因子之和函数\()\),线性筛的时候有两种情况
    1.当\(i\)不是\(p\)的倍数,则\(f(i\times p)=f(i)\times f(p)\)
    2.\(i\)\(p\)的倍数,则考虑\(f(i\times p)\)\(f(i)\)多了什么,实际上是某个\(f(p_i^{k_i})\)变成了 \(f(p_i^{k_i+1})\),在这里可以先除以\(f(p_i^{k_i})\),再乘\(f(p_i^{k_i+1})\).

欧拉函数

  1. \(\phi(1)=1\)
  2. \(\phi(p)=p-1\) \((p\)为素数\()\)
  3. \(\phi(p^k)=p^k-p^{k-1}=(p-1)\times p^{k-1}\) \((p\)为素数\()\)
  4. \(m,n\)互质,则有\(\phi(n*m)=\phi(n)*\phi(m)\)
  5. 对于任意 \(n=p_1^{k_1}*p_2^{k_2}*...*p_r^{k_r}\) (其中 \(p_1,p_2,...,p_k\)\(n\) 的互不相同的质因子) 则有
    \(\varphi(n)=\prod_{i=1}^{r}\varphi(p_i^{k_i})=\prod_{i=1}^{r}(p_i-1)p_i^{k_i-1}=\prod_{i=1}^{r}(1-\frac 1{p_i})*p_i^{k_i}=n*\prod_{i=1}^{r}(1-\frac 1{p_i})\)
  6. \(n>1\)时,小于\(n\)的数中,与\(n\)互质的数的总和为\(\frac{\phi(n)*n}{2}\)
    由此推导可得\(\sum\limits_{i=1}^ni\cdot[gcd(i,n)==1]=n\cdot \frac{\phi(n)+[n==1]}{2}\)
  7. \(\sum\limits_{d\mid n}\phi(d)=n\)
  8. \(n,a\)为正整数且\(n,a\)互质,则
    \(a^{\phi(n)}\equiv 1\pmod n\),
    \(a^{\phi(n)-1}\equiv a^{-1}\pmod n\)
    \(n>1,a,n\)互质,\(a^b\mod n=a^{b\mod \phi(n)}\mod n\)

莫比乌斯函数

1.定义

莫比乌斯函数\(\mu(m)\)
定义\(\mu(1)=1\)
\(x=p_1p_2..p_n\),且\(p_i\)为不同的质数(即\(x\)由若干幂次为\(1\)的质数相乘),\(\mu(x)=(-1)^n\),其他情况\(\mu(x)=0\)

2.性质

1.\(\sum_{d\mid n}\mu(d)=[n==1]\)
2.莫比乌斯函数为积性函数

3.莫比乌斯函数的代码实现

利用积性性质线性筛\(O(n)\)处理

const int N=1e5+10;
int mu[N],p[N],pn=0;//mu,质数,质数个数
bool flag[N];//标记质数 
void getmu(){
	mu[1]=1;pn=0;
	for(int i=2;i<N;i++){
		if(!flag[i]) mu[i]=-1;
		for(int j=1;j<=pn&&(ll)i*(ll)p[j]<N;j++){
			flag[i*p[j]]=1;
			if(!(i%p[j])){mu[i*p[j]]=0;break;}
			else mu[i*p[j]]=-mu[i];
		}
	}
} 

4.莫比乌斯函数与欧拉函数

应用卷积得:

\[\phi(n)=\sum\limits_{d\mid n}\mu(d)f(\frac{n}{d})=\sum\limits_{d\mid n}\mu(d)\frac{n}{d} \]

莫比乌斯反演

1.公式

若$$f(n)=\sum\limits_{d\mid n}g(d)=\sum\limits_{d\mid n}g(\frac{n}{d})$$
则$$g(n)=\sum\limits_{d\mid n}f(d)\mu(\frac{n}{d})=\sum\limits_{d\mid n}f(\frac{n}{d})\mu(d)$$
以上二式互为充分必要条件

另一种形式:

\[f(n)=\sum\limits_{n\mid d}g(d) \]

\[g(n)=\sum\limits_{n\mid d}f(d)\mu(\frac{d}{n}) \]

狄利克雷卷积

1.定义

定义两个数论函数的狄利克雷卷积为:

\[(f\times g)(n)=\sum\limits_{d\mid n}f(d)\times g(\frac{n}{d}) \]

也可以写成

\[(f\times g)(n)=\sum\limits_{ab=n}f(a)\times g(b) \]

2.狄利克雷卷积的性质及其常见应用

  1. 交换律:\(f\times g=(g\times f)\)
  2. 结合律:\((f\times g)\times h=f\times (g\times h)\)
  3. 分配率:\((f+g)\times h=f\times h+g\times h\)
  4. 如果\(f(n),g(n)\)都为积性函数,那么他们的狄利克雷卷积也为积性函数
  5. 任何数论函数都与元函数的卷积等于函数自己,即\((f\times e)(n)=\sum\limits_{d\mid n}f(d)\times e(\frac{n}{d})=f(n)\)
  6. \((\mu \times I)(n)=\sum\limits_{d\mid n}\mu(d)\times I(\frac{n}{d})=\sum\limits_{d\mid n}\mu(d)=e(n)\)
  7. \(\phi\times I(n)=\sum\limits_{d\mid n}\phi(d)\times I(\frac{n}{d})=\sum\limits_{d\mid n}\phi(d)=n=id(n)\)
  8. \(\phi =id\times \mu\)\((\)第七条左右式同乘\(\mu\)\()\)

3.狄利克雷卷积的代码实现

复杂度:\(O(nlogn)\)

for (int i = 1; i <= n; i++) {
	for (int j = 1; i*j <= n; j++) {
		res[i * j] += f[i] * g[j];
	}
}

4.狄雷克雷卷积与其他函数的结合应用

推导莫比乌斯反演

已知一个数论函数\(f(n)=\sum\limits_{d\mid n}g(d)\),那么\(f=g\times I\) \((\) \(g\)函数与恒等函数\(I\)函数的卷积 \()\),根据狄利克雷卷积的性质,在两边同乘\(\mu\),得到:

\[f\times \mu=g\times I\times \mu=g\times e=g \]

所以

\[g(n)=\sum\limits_{d\mid n}f(d)\mu(\frac{n}{d}) \]

可见狄利克雷卷积对原问题进行了更高层次的抽象,使问题变得简单

推导\(\mu\)\(\phi\)的关系

已知欧拉函数一性质:

\[n=\sum\limits_{d\mid n}\phi(d) \]

\(f(n)=n,g(n)=\phi(n)\),反演得:

\[\phi(n)=\sum\limits_{d\mid n}\mu(d)f(\frac{n}{d})=\sum\limits_{d\mid n}\mu(d)\frac{n}{d} \]

整除分块

1.概念思想

考虑最简单的情况,对于\(\sum\limits_{i=1}^n{\lfloor\frac{n}{i}\rfloor}\)
通过一些性质的分析可发现,\(\lfloor\frac{n}{i}\rfloor\)是由若干段值相等的区间构成的,假设该区间左边界为\(L\),右边界为\(R\),那么对于区间内的每个值,往往可以用基本相同的式子得到答案,乘上与区间长度有关的系数即可,这样一段取值序列\([1,n]\)被分成\(\sqrt n\)块,复杂度\(O(\sqrt n)\)
在最简单的整除分块中,对于已知的\(L\),对应的\(R=\lfloor\frac{N}{\lfloor\frac{N}{L}\rfloor}\rfloor\)

2.定理

  1. \(\sum\limits_{i=1}^n\lfloor\frac{n}{i}\rfloor=2\sum\limits_{i=1}^{\lfloor\sqrt{n}\rfloor}\lfloor\frac{n}{i}\rfloor-(\lfloor\sqrt{n}\rfloor)^2\)
  2. \(\sum\limits_{i=1}^n{\lfloor\frac{n}{i}\rfloor}=\sum\limits_{d=1}^n{\sigma_0(d)}\) \((\) \(\sigma_0(d)\) 表示 \(d\) 的因子个数 \()\)
  3. \(\sum\limits_{i=1}^n{\lfloor\frac{n}{i}\rfloor}=\sum\limits_{i=1}^n\sum\limits_{j=1}^n[i\cdot j\leq n]\)

3.代码实现

假设求\(\sum\limits_{i=1}^n{\lfloor\frac{n}{i}\rfloor}\),这里给出最基本的写法

ll get(ll n){
	ll ans=0;
	for(ll L=1,R;L<=n;L=R+1){
		R=n/(n/L);
		ans=(ans+(ll)(R-L+1)*(ll)(n/L)%M)%M;
	}
	return ans;
}

4.常见卷积

  1. \((\mu\times I)(n)=\sum\limits_{d\mid n}\mu(d)=e(n)=[n==1]\)
  2. \((\phi\times I)(n)=\sum\limits_{d\mid n}\phi(d)=n=id(n)\)
  3. \(\phi=id\times \mu\)
  4. \((f\times e)(n)=f(n)\)

积性函数前缀和

1.概念思想

对于积性函数f(n),求

\[S(n)=\sum\limits_{i=1}^nf(i)(1\leq n\leq 10^10) \]

以上问题可用杜教筛解决

为解决此问题,先尝试计算\(g\times f\)的前缀和:
\(\sum\limits_{i=1}^n(f\times g)(i)=\sum\limits_{i=1}^n\sum\limits_{d\mid i}g(d)f(\frac{i}{d})=\sum\limits_{d=1}^ng(d)\sum\limits_{d\mid i}f(\frac{i}{d})=\sum\limits_{d=1}^ng(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i)=\sum\limits_{i=1}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\)
得到:

\[g(1)S(n)=\sum\limits_{i=1}^n(f\times g)(i)-\sum\limits_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor) \]

\(S(n)\)是要求的值,\(S(\lfloor\frac{n}{i}\rfloor)\)可以递归解决,关键要找到合适的\(g\)
用线性筛等预处理出\(S(i)\)\(n^{\frac{2}{3}}\)项,剩余的项采用记忆化搜索(用hash或者map记录值)
假设查询q次前缀和,总复杂度为\(O(q+n^{\frac{2}{3}})\),花在查询上的复杂度始终是均摊\(O(n^{\frac{2}{3}})\)

2.代码实现

这里以求\(\mu\)的前缀和为例
假设题目\(n\leq 1e9\)
\(I\)\(\mu\)卷积,得

\[I(1)S(n)=\sum\limits_{i=1}^n(\mu\times I)(i)-\sum\limits_{i=2}^nI(i)S(\lfloor\frac{n}{i}\rfloor) \]

\[S(n)=1-\sum\limits_{i=2}^nS(\lfloor\frac{n}{i}\rfloor) \]

const int N=1e6+5;//1e9的2/3次幂为1e6 
const ll M=1e9+7;//题目的模数 
#define un_mp unordered_map
un_mp<ll,ll> q;//unordered_map实现记忆化搜索 
int mu[N],p[N],pn=0;bool flag[N];
void pre(){
	mu[1]=1;
	for(int i=2;i<N;i++){
		if(!flag[i]) p[++pn]=i,mu[i]=(-1+M)%M;;
		for(int j=1;j<=pn&&(ll)i*(ll)p[j]<N;j++){
			flag[i*p[j]]=1;
			if(!(i%p[j])){mu[i*p[j]]=0;break;}
			else mu[i*p[j]]=(M-mu[i])%M;
		}
	}
	for(int i=2;i<N;i++) mu[i]=(mu[i]+mu[i-1])%M;//预处理前若干项前缀和 
}
ll solve(ll n){//剩余的前缀和递归计算 
	if(n<N) return mu[n];//若已预处理,直接return值 
	if(q[n]) return q[n];//若已记忆化,直接return值 
	ll res=1ll;
	for(ll L=2,R;L<=n;L=R+1){//整除分块加速计算 
		R=(n/(n/L));
		res=(res+M-(ll)(R-L+1)%M*solve(n/L)%M)%M;
	}
	return q[n]=res;//记忆化 
}

3.常见的前缀和与g的选取

  1. 对于\(\sum\limits_{i=1}^n\mu(i)\),选取\(I\):\(S(n)=1-\sum\limits_{i=2}^nS(\lfloor\frac{n}{i}\rfloor)\)
  2. 对于\(\sum\limits_{i=1}^n\phi(i)\),选取\(I\):\(S(n)=n*(n+1)/2-\sum\limits_{i=2}^nS(\lfloor\frac{n}{i}\rfloor)\)
  3. \(\phi=id\times \mu\):变成求\(\phi\)的前缀和

常用技巧

1.推导方法

  1. 交换枚举的先后顺序
  2. 交换约数与倍数
  3. 对于\(d\mid n\),往往可以转而枚举\(d\)\(n\)\(d\)的倍数\(\lfloor\frac{n}{d}\rfloor\),此时要注意原有数值所代表的的意义及其表示在操作后的变化,分清系数的关系
  4. 替换和式中的标号
  5. \(\mu\)替换形似\([g==1]\)的式子
  6. 对于\([g==d]\)的式子,可以将\(d\)提出,然后有选择地进行步骤5
  7. 若式子里有\(gcd(i,j)\)的形式,可以枚举\(gcd(i,j)\)的值,即枚举\(d\)后转化为\([gcd(i,j)==d]\)的形式,根据题目有选择地进行步骤6
  8. 常见的卷积形式见上文

2.计算优化

  1. 对于\(\sum\limits_{i=1}^n\lfloor\frac{n}{i}\rfloor\),可以整除分块加速计算

3.其他定理

  1. \(\sum\limits_{i=1}^ni=\frac{n(n+1)}{2}\)
  2. \(\sum\limits_{i=1}^ni^2=\frac{n(n+1)(2n+1)}{6}\)
  3. \(\sum\limits_{i=1}^ni^3=[\frac{n(n+1)}{2}]^2\)
  4. \(1+3+5+...+(2n-1)=n^2\)

TIPS

  1. 整除分块时注意int和long long在效率上的差别
  2. \(\mu\)可能为负,在取模题中注意对其取模
  3. 注意不要爆int,不要爆int,不要爆int
  4. 对于某些毒瘤题目,酌情使用unsigned long long
  5. 注意\(\sum\limits_{i=1}^n\)\(\sum\limits_{i=1}^ni\)的区别
posted @ 2022-01-28 18:15  Cafard  阅读(103)  评论(3)    收藏  举报