数论函数初步
作者:互联网
数论函数初步
数论函数
数论函数&狄利克雷卷积
-
定义:在全体(正)整数上定义的函数为数论函数
-
积性定义:
完全积性:\(f(ab)=f(a)f(b)\)积性:若\(\gcd(a,b)=1\),则\(f(ab)=f(a)f(b)\)
规律:如果\(f(x),g(x)\) 为积性函数,则一下函数也有积性:
\((f(x))^{-1},f(x)g(x),f(g(x)),f*g\)
-
积性函数举例:
\[1(x)=1\\ Id(x)=x\\ \phi(x)\\ I(x)=[x==1]\\ \] -
狄利克雷卷积
定义数论函数\(f(n),g(n)\)的狄利克雷卷积为\(h(n)\):
\[h(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d}) \]记\(h=f*g\)
定理:两个积性函数的卷积为积性函数。
证明:
\[h(xy)=\sum\limits_{d|xy}f(d)g(\frac{xy}{d})=\sum\limits_{d_1|x}\sum\limits_{d_2|y}f(d_1d_2)g(\frac{xy}{d_1d_2})\\=\sum\limits_{d_1|x}\sum\limits_{d_2|y}f(d_1)f(d_2)g(\frac{x}{d1})g(\frac{y}{d_2})=\\\sum\limits_{d_1|x}f(d_1)g(\frac{x}{d1})\sum\limits_{d_2|y}f(d_2)g(\frac{y}{d2})\\=h(x)h(y) \]定理:两个积性函数对应位置相乘也是积性函数
由此,我们便可以定义更多数论函数,以卷积描述其之间的关系:
\[d(n)=\sum\limits_{d|n},即d=1*1\\ Id(n)=n=\sum\limits_{d|n},即Id=\phi*1 \]狄利克雷卷积性质:
-
交换律:设两个函数\(f(n),g(n)\),有 \(f*g=g*f\)
-
结合律:设三个积性函数\(f,g,h\),有\((f*g)*h=f*(g*h)\)
-
\(I\)是单位元:对于任意数论函数\(f\),\(f*I=I*f=f\)
证明:$ f*I=\sum\limits_{d|n}f(d)I(\frac{n}{d})=f $
-
定义:狄利克雷逆
若有\(f*g=I\) ,则数论函数\(f,g\)互为彼此的狄利克雷逆。
-
常见数论函数
单位函数: \(I(x)=[x==1]\)
幂函数:\(id_k(n)=n^k,id(n)=n\)
欧拉函数:\(\phi(n)=\sum\limits_{i=0}^{n-1}[gcd(x,n)==1]=n\times \prod\limits_{d|n}(1-\frac{1}{d})\)
莫比乌斯函数:\(\mu\)
莫比乌斯反演
莫比乌斯函数
定义
定义莫比乌斯函数\(\mu(x)\)
当\(x=1\)时,\(\mu(x)=1\)
当\(x\) 是 \(square-free~number\) (无平方因数)时,设其质因数分解有\(k\)项,\(\mu(x)=(-1)^k\)
否则,\(\mu(x)=0\)
可以证得\(\mu(x)\)为不完全积性函数:
若\(\gcd(x,y)=1\),显然有\(\mu(xy)=\mu(x)\mu(y)\)
定理
\(I=\mu*1\),即\(\mu\)与\(1\)彼此互逆
证明:
当\(x=1\)时,显然\(I=\mu*1\)
当\(x\)为\(square-free~number\)时,显然\(I=\mu*1\)
当\(x\)不为\(square-free~number\)时,设\(x=p_1p_2....p_k\):
\[\mu*1=\sum\limits_{d|x}^{}\mu(d)=\sum\limits_{i=1}^{k}\sum\limits_{k个里面选i个的乘积c}\mu(c)\\ =\sum\limits_{i=1}^{k}\begin{pmatrix}k\\i\end{pmatrix}(-1)^i=(1-1)^k=[k==0]=I(x) \]\[其中\\ \sum\limits_{i=1}^{k}\begin{pmatrix}k\\i\end{pmatrix}(-1)^i=(1-1)^k\\ 使用了二项式定理\\ (x+y)^k=\sum\limits_{i=0}^{k}\begin{pmatrix}k\\i\end{pmatrix}x^{k-i}y^i \]莫比乌斯变换&反演
变换:设数论函数\(f\),称\(F=f*1\) 为莫比乌斯变换
反演:设数论函数\(F\),称\(f=F*\mu\)为莫比乌斯反演
线性筛
埃氏筛法
\(O(n\log\log n)\)
bool no[maxn];
int prime[maxn],tot;
for(int i=2;i<=n;i++){
if(no[i]) continue;
prime[++tot]=i;
for(int e=i+i;e<=n;e+=i) no[e]=1;
}
线性筛
\(O(n)\)
保证每个数只被其最小质因子筛去
bool no[maxn];
int prime[maxn],top;
for(int i=2;i<=n;i++){
if(!no[i]) prime[++tot]=i;
for(int e=1;e<=top&&prime[e]*i<=n;i++){
no[prime[e]*i]=1;
if(i%prime[e]==0) break;
}
}
线性筛的用处
筛出某些积性函数在\(1\)~\(n\)的所有取值
基本思路:
在第二个循环时,若i%prime[e]!=0
,则易得\(f(i*prime[e])=f(i)f(prime[e])\)
若i%prime[e]==0
,设\(prime[e]\)在\(i\)中的指数为\(k\),易得\(f(i*prime[e])=\frac{f(prime[e]^{k+1})}{f(prime[e]^k)}f(i)\)。
当然,要注意\(f(prime[e]^k)!=0\),如果等于\(0\),也可以这样\(f(i*prime[e])=f(\frac{i}{prime[e]^k})f(prime[e]^{k+1})\)
例一
有一数论函数:
\(f(1)=1\)
\(f(P^k)=P\)^\(k\) (P代表质数)
\(f(xy)=f(x)f(y),gcd(x,y)=1\)
求出\(f(n)\)
这个直接动用一下上面的思路即可
例二——线筛欧拉函数
首先欧拉函数有以下性质
- \(\phi(xy)=\phi(x)\phi(y),gcd(x,y)=1\)
- \(p|x,\phi(p\times x)=p\times \phi(x)\) \(\to\) \(\frac{\phi(k^{a+1})}{\phi(k^a)}=k\)
- \(\phi(prime)=prime-1\)
CODE
int prime[maxn],top,phi[maxn];
bool no[maxn];
inline void oula(){
phi[1]=1;
for(int i=2;i<=n;i++){
if(!no[i]) prime[++top]=1,phi[i]=i-1;
for(int e=1;e<=top&&prime[e]*i<=n;e++){
no[prime[e]*i]=1;
if(i%prime[e]==0){
phi[i*prime[e]]=phi[e]*phi[i];
break;
}
phi[i*prime[e]]=phi[i]*phi[prime[e]];
}
}
}
例三——线筛莫比乌斯函数
- 积性
- 函数定义
- \(\frac{\mu(k^{a+1})}{\mu(k^a)}=0\)
CODE
int prime[maxn],top,mu[maxn];
bool no[maxn];
inline void oula(){
mu[1]=1;
for(int i=2;i<=n;i++){
if(!no[i]) prime[++top]=1,mu[i]=-1;
for(int e=1;e<=top&&prime[e]*i<=n;e++){
no[prime[e]*i]=1;
if(i%prime[e]==0){
mu[i*prime[e]]=0;//因子有平方数
break;
}
mu[i*prime[e]]=mu[i]*mu[prime[e]];
}
}
}
例四——求出约数个数
在\(O(n)\)时间内求出函数\(\tau\)在\(1\)~\(n\)的所有取值
注:$\tau(n) \(指\)n$的因数个数
这里可以发现:
- \(\gcd(a,b)=1,\tau(ab)=\tau(a)\tau(b)\)
- \(\tau(prime)=2\)
- \(x=p_1^{k_1}p_2^{k_2}p_3^{k_3}....p_n^{k_n},\tau(x)=(k_1+1)(k_2+1)...(k_n+1)\)
CDOE
for(int i = 2; i <= n; i++){
if(isp[i] == 0) {pr[++cnt] = i; tau[i] = 2; g[i] = 2;}
for(int j = 1; j <= cnt && pr[j] * i <= n; j++){
isp[i * pr[j]] = 1;
if(i % pr[j] == 0) {
tau[i * pr[j]] = (g[i] + 1) * tau[i] / g[i];
g[i * pr[j]] = g[i] + 1;
break;
}
tau[i * pr[j]] = tau[i] * 2;
g[i * pr[j]] = 2;
}
}
整数分块
例——求\(\sum\limits_{i=1}^{i=n}\llcorner \frac{n}{i}\lrcorner\)
这个东东只有\(\sqrt n\) 种取值,直接分块计算即可
练习
一
数论函数
数论函数&狄利克雷卷积
-
定义:在全体(正)整数上定义的函数为数论函数
-
积性定义:
完全积性:\(f(ab)=f(a)f(b)\)积性:若\(\gcd(a,b)=1\),则\(f(ab)=f(a)f(b)\)
规律:如果\(f(x),g(x)\) 为积性函数,则一下函数也有积性:
\((f(x))^{-1},f(x)g(x),f(g(x)),f*g\)
-
积性函数举例:
\[1(x)=1\\ Id(x)=x\\ \phi(x)\\ I(x)=[x==1]\\ \] -
狄利克雷卷积
定义数论函数\(f(n),g(n)\)的狄利克雷卷积为\(h(n)\):
\[h(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d}) \]记\(h=f*g\)
定理:两个积性函数的卷积为积性函数。
证明:
\[h(xy)=\sum\limits_{d|xy}f(d)g(\frac{xy}{d})=\sum\limits_{d_1|x}\sum\limits_{d_2|y}f(d_1d_2)g(\frac{xy}{d_1d_2})\\=\sum\limits_{d_1|x}\sum\limits_{d_2|y}f(d_1)f(d_2)g(\frac{x}{d1})g(\frac{y}{d_2})=\\\sum\limits_{d_1|x}f(d_1)g(\frac{x}{d1})\sum\limits_{d_2|y}f(d_2)g(\frac{y}{d2})\\=h(x)h(y) \]定理:两个积性函数对应位置相乘也是积性函数
由此,我们便可以定义更多数论函数,以卷积描述其之间的关系:
\[d(n)=\sum\limits_{d|n},即d=1*1\\ Id(n)=n=\sum\limits_{d|n},即Id=\phi*1 \]狄利克雷卷积性质:
-
交换律:设两个函数\(f(n),g(n)\),有 \(f*g=g*f\)
-
结合律:设三个积性函数\(f,g,h\),有\((f*g)*h=f*(g*h)\)
-
\(I\)是单位元:对于任意数论函数\(f\),\(f*I=I*f=f\)
证明:$ f*I=\sum\limits_{d|n}f(d)I(\frac{n}{d})=f $
-
定义:狄利克雷逆
若有\(f*g=I\) ,则数论函数\(f,g\)互为彼此的狄利克雷逆。
-
常见数论函数
单位函数: \(I(x)=[x==1]\)
幂函数:\(id_k(n)=n^k,id(n)=n\)
欧拉函数:\(\phi(n)=\sum\limits_{i=0}^{n-1}[gcd(x,n)==1]=n\times \prod\limits_{d|n}(1-\frac{1}{d})\)
莫比乌斯函数:\(\mu\)
莫比乌斯反演
莫比乌斯函数
定义
定义莫比乌斯函数\(\mu(x)\)
当\(x=1\)时,\(\mu(x)=1\)
当\(x\) 是 \(square-free~number\) (无平方因数)时,设其质因数分解有\(k\)项,\(\mu(x)=(-1)^k\)
否则,\(\mu(x)=0\)
可以证得\(\mu(x)\)为不完全积性函数:
若\(\gcd(x,y)=1\),显然有\(\mu(xy)=\mu(x)\mu(y)\)
定理
\(I=\mu*1\),即\(\mu\)与\(1\)彼此互逆
证明:
当\(x=1\)时,显然\(I=\mu*1\)
当\(x\)为\(square-free~number\)时,显然\(I=\mu*1\)
当\(x\)不为\(square-free~number\)时,设\(x=p_1p_2....p_k\):
\[\mu*1=\sum\limits_{d|x}^{}\mu(d)=\sum\limits_{i=1}^{k}\sum\limits_{k个里面选i个的乘积c}\mu(c)\\ =\sum\limits_{i=1}^{k}\begin{pmatrix}k\\i\end{pmatrix}(-1)^i=(1-1)^k=[k==0]=I(x) \]\[其中\\ \sum\limits_{i=1}^{k}\begin{pmatrix}k\\i\end{pmatrix}(-1)^i=(1-1)^k\\ 使用了二项式定理\\ (x+y)^k=\sum\limits_{i=0}^{k}\begin{pmatrix}k\\i\end{pmatrix}x^{k-i}y^i \]莫比乌斯变换&反演
变换:设数论函数\(f\),称\(F=f*1\) 为莫比乌斯变换
反演:设数论函数\(F\),称\(f=F*\mu\)为莫比乌斯反演
线性筛
埃氏筛法
\(O(n\log\log n)\)
bool no[maxn];
int prime[maxn],tot;
for(int i=2;i<=n;i++){
if(no[i]) continue;
prime[++tot]=i;
for(int e=i+i;e<=n;e+=i) no[e]=1;
}
线性筛
\(O(n)\)
保证每个数只被其最小质因子筛去
bool no[maxn];
int prime[maxn],top;
for(int i=2;i<=n;i++){
if(!no[i]) prime[++tot]=i;
for(int e=1;e<=top&&prime[e]*i<=n;i++){
no[prime[e]*i]=1;
if(i%prime[e]==0) break;
}
}
线性筛的用处
筛出某些积性函数在\(1\)~\(n\)的所有取值
基本思路:
在第二个循环时,若i%prime[e]!=0
,则易得\(f(i*prime[e])=f(i)f(prime[e])\)
若i%prime[e]==0
,设\(prime[e]\)在\(i\)中的指数为\(k\),易得\(f(i*prime[e])=\frac{f(prime[e]^{k+1})}{f(prime[e]^k)}f(i)\)。
当然,要注意\(f(prime[e]^k)!=0\),如果等于\(0\),也可以这样\(f(i*prime[e])=f(\frac{i}{prime[e]^k})f(prime[e]^{k+1})\)
例一
有一数论函数:
\(f(1)=1\)
\(f(P^k)=P\)^\(k\) (P代表质数)
\(f(xy)=f(x)f(y),gcd(x,y)=1\)
求出\(f(n)\)
这个直接动用一下上面的思路即可
例二——线筛欧拉函数
首先欧拉函数有以下性质
- \(\phi(xy)=\phi(x)\phi(y),gcd(x,y)=1\)
- \(p|x,\phi(p\times x)=p\times \phi(x)\) \(\to\) \(\frac{\phi(k^{a+1})}{\phi(k^a)}=k\)
- \(\phi(prime)=prime-1\)
CODE
int prime[maxn],top,phi[maxn];
bool no[maxn];
inline void oula(){
phi[1]=1;
for(int i=2;i<=n;i++){
if(!no[i]) prime[++top]=1,phi[i]=i-1;
for(int e=1;e<=top&&prime[e]*i<=n;e++){
no[prime[e]*i]=1;
if(i%prime[e]==0){
phi[i*prime[e]]=phi[e]*phi[i];
break;
}
phi[i*prime[e]]=phi[i]*phi[prime[e]];
}
}
}
例三——线筛莫比乌斯函数
- 积性
- 函数定义
- \(\frac{\mu(k^{a+1})}{\mu(k^a)}=0\)
CODE
int prime[maxn],top,mu[maxn];
bool no[maxn];
inline void oula(){
mu[1]=1;
for(int i=2;i<=n;i++){
if(!no[i]) prime[++top]=1,mu[i]=-1;
for(int e=1;e<=top&&prime[e]*i<=n;e++){
no[prime[e]*i]=1;
if(i%prime[e]==0){
mu[i*prime[e]]=0;//因子有平方数
break;
}
mu[i*prime[e]]=mu[i]*mu[prime[e]];
}
}
}
例四——求出约数个数
在\(O(n)\)时间内求出函数\(\tau\)在\(1\)~\(n\)的所有取值
注:$\tau(n) \(指\)n$的因数个数
这里可以发现:
- \(\gcd(a,b)=1,\tau(ab)=\tau(a)\tau(b)\)
- \(\tau(prime)=2\)
- \(x=p_1^{k_1}p_2^{k_2}p_3^{k_3}....p_n^{k_n},\tau(x)=(k_1+1)(k_2+1)...(k_n+1)\)
CDOE
for(int i = 2; i <= n; i++){
if(isp[i] == 0) {pr[++cnt] = i; tau[i] = 2; g[i] = 2;}
for(int j = 1; j <= cnt && pr[j] * i <= n; j++){
isp[i * pr[j]] = 1;
if(i % pr[j] == 0) {
tau[i * pr[j]] = (g[i] + 1) * tau[i] / g[i];
g[i * pr[j]] = g[i] + 1;
break;
}
tau[i * pr[j]] = tau[i] * 2;
g[i * pr[j]] = 2;
}
}
整数分块
例——求\(\sum\limits_{i=1}^{i=n}\llcorner \frac{n}{i}\lrcorner\)
这个东东只有\(\sqrt n\) 种取值,直接分块计算即可
练习
一
标签:prime,mu,函数,limits,数论,sum,初步,积性 来源: https://www.cnblogs.com/LQX-OI/p/16530999.html