其他分享
首页 > 其他分享> > 数论函数初步

数论函数初步

作者:互联网

数论函数初步

数论函数

数论函数&狄利克雷卷积

  1. 定义:在全体(正)整数上定义的函数为数论函数

  2. 积性定义:
    完全积性:\(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\)

  3. 积性函数举例:

    \[1(x)=1\\ Id(x)=x\\ \phi(x)\\ I(x)=[x==1]\\ \]

  4. 狄利克雷卷积

    定义数论函数\(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 \]

    狄利克雷卷积性质:

    1. 交换律:设两个函数\(f(n),g(n)\),有 \(f*g=g*f\)

    2. 结合律:设三个积性函数\(f,g,h\),有\((f*g)*h=f*(g*h)\)

    3. \(I\)是单位元:对于任意数论函数\(f\),\(f*I=I*f=f\)

      证明:$ f*I=\sum\limits_{d|n}f(d)I(\frac{n}{d})=f $

    4. 定义:狄利克雷逆

      若有\(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)\)

这个直接动用一下上面的思路即可

例二——线筛欧拉函数

首先欧拉函数有以下性质

  1. \(\phi(xy)=\phi(x)\phi(y),gcd(x,y)=1\)
  2. \(p|x,\phi(p\times x)=p\times \phi(x)\) \(\to\) \(\frac{\phi(k^{a+1})}{\phi(k^a)}=k\)
  3. \(\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]];
        }
    }
}
例三——线筛莫比乌斯函数
  1. 积性
  2. 函数定义
  3. \(\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$的因数个数

这里可以发现:

  1. \(\gcd(a,b)=1,\tau(ab)=\tau(a)\tau(b)\)
  2. \(\tau(prime)=2\)
  3. \(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\) 种取值,直接分块计算即可

练习

数论函数

数论函数&狄利克雷卷积

  1. 定义:在全体(正)整数上定义的函数为数论函数

  2. 积性定义:
    完全积性:\(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\)

  3. 积性函数举例:

    \[1(x)=1\\ Id(x)=x\\ \phi(x)\\ I(x)=[x==1]\\ \]

  4. 狄利克雷卷积

    定义数论函数\(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 \]

    狄利克雷卷积性质:

    1. 交换律:设两个函数\(f(n),g(n)\),有 \(f*g=g*f\)

    2. 结合律:设三个积性函数\(f,g,h\),有\((f*g)*h=f*(g*h)\)

    3. \(I\)是单位元:对于任意数论函数\(f\),\(f*I=I*f=f\)

      证明:$ f*I=\sum\limits_{d|n}f(d)I(\frac{n}{d})=f $

    4. 定义:狄利克雷逆

      若有\(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)\)

这个直接动用一下上面的思路即可

例二——线筛欧拉函数

首先欧拉函数有以下性质

  1. \(\phi(xy)=\phi(x)\phi(y),gcd(x,y)=1\)
  2. \(p|x,\phi(p\times x)=p\times \phi(x)\) \(\to\) \(\frac{\phi(k^{a+1})}{\phi(k^a)}=k\)
  3. \(\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]];
        }
    }
}
例三——线筛莫比乌斯函数
  1. 积性
  2. 函数定义
  3. \(\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$的因数个数

这里可以发现:

  1. \(\gcd(a,b)=1,\tau(ab)=\tau(a)\tau(b)\)
  2. \(\tau(prime)=2\)
  3. \(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