积性函数

一.定义

什么是积性函数,看 百度百科 还有策爷的博客

积性函数:对于任意互质的正整数a和b有性质 \(f(ab)=f(a)f(b)\)的数论函数。
完全积性函数:对于任意正整数a和b有性质\(f(ab)=f(a)f(b)\)的数论函数。

这里还有一个文档,讲得蛮详细的 线性筛积性函数
然后这里还有一个博客列举了很多常用的积性函数博客
2016年国家候选队论文任之洲积性函数求和的几种方法

对于两个算术函数 \(f\),\(g\) ,定义其狄利克雷卷积为 \(f*g\) ,其中 \((f*g)(n)=\sum_{d|n}f(d)*g(\frac{n}{d})\)
狄利克雷卷积满足很多性质:
交换律:\(f∗g=g∗f,\)
结合律:\(f*(g*h)=(f*g)*h\)
逐点加法的分配律:\(f∗(g+h)=f∗g+f∗h\)
\(f\),\(g\)是积性函数,那么\(f∗g\)也是积性函数。
狄利克雷卷积可以用\(O(nlogn)\)的筛法预处理出来。

\(1(n)\) -不变的函数,定义为\(1(n)=1\)(完全积性)
\(id(n)\) -单位函数,定义为\(id(n)=n\)(完全积性)
\(\varepsilon(n)\) -定义为:若\(n=1\)\(\varepsilon(n)=1\);若\(n>1\)\(\varepsilon(n)=0\)。别称为“对于狄利克雷卷积的乘法单位”(完全积性)
\(\sigma_{k}(n)\)\(n\)的所有正因子的\(k\)次幂之和
\(\sigma(n)\) - \(n\)的所有质因子之和(\(\sigma_{1}(n)\)
\(d(n)\)\(n\)的正因子个数(\(\sigma_{0}(n)\)

因为 \(\sum_{d|n}\mu(d)=[n=1]\) ,所以 \(1*\mu=\varepsilon\)(由前者证明后者)
因为 \(\sum_{d|n}\varphi(d)=n\) ,所以 \(1*\varphi=id\)(由前者证明后者)
还有一点,莫比乌斯函数与欧拉函数之间的转化 $$id\mu=1\varphi\mu=\varepsilon\varphi=\varphi$$

二.线性筛法

(一)线性筛素数

\(n=p*m=p^\prime*m^\prime\),其中\(n\)维合数,\(p\)\(n\)的最小质因子。那么,$ p<p^\prime \( 并且 \) m^\prime<m $, \(p|m^\prime\) 所以在筛到\(m^\prime\)的时候,内维的\(j\)循环还没有到\(p^\prime\)就会被\(p\)给break掉,在到\(m\)的时候,\(j\)\(p\)后就会筛掉\(n\),所以这样就保证了每一个数之后被它最小的质因子筛掉。
例如,在筛24的时候, $ 24 = 3 * 8 = 2 * 12 $ ,那么它就只会被\(2 * 12\)筛掉

For (i,2,n) {
	if (!vis[i]) p[++N]=i;
	For (j,1,N) {
		if (i*p[j]>n) break;
		vis[i*p[j]]=1;
		if (i%p[j]==0) break;
	}
}

(二)欧拉函数

1.性质

  • (1) \(\varphi(n)\)表示\(1..n\)中与\(n\)互质的数的个数

  • (2) \(\varphi(n)\)为积性函数

  • (3) \(\varphi(p^{k})=p^{k}-p^{k-1}=(p-1)*p^{k-1}\)

  • (4) 欧拉定理:\(a^{\varphi(n)}\equiv 1 \pmod{n}\) 其中\((a,n)=1\)

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

  • (6) \(n>1\)时,\(1..n\)中与\(n\)互质的整数之和为\(\frac{n\varphi(n)}{2}\)

2.线性筛欧拉函数

具体的东西上面那个文档讲得很详细,这里只是补充几点

需要用到的性质
(1) \(p\) 为质数时 \(\varphi(p)=p-1\)
(2) 若 \(n=p*m\) 其中 \(p\)\(n\) 的最小质因子,如果 \(p|m\) 那么 \(\varphi(n)=p*\varphi(m)\)
(3) 若 \(n=p*m\) 其中 \(p\)\(n\) 的最小质因子,如果 \(p\not| m\) 那么 \(\varphi(n)=\varphi(p)*\varphi(m)=(p-1)*\varphi(m)\)
这一点根据积性函数性质可以得到

phi[1]=1;
For (i,2,n) {
	if (!vis[i]) {
		p[++N]=i;
		phi[i]=i-1;
	}
	For (j,1,N) {
		if (i*p[j]>n) break;
		vis[i*p[j]]=1;
		if (i%p[j]==0) {
			phi[i*p[j]]=p[j]*phi[i];
			break;
		}
		else
			phi[i*p[j]]=(p[j]-1)*phi[i];
	}
}

(三)莫比乌斯函数

1.性质

  • \(n=p_{1}^{k_{1}}*p_{2}^{k_{2}}*...*p_{m}^{k_{m}}\),其中 \(p\) 为素数,那么

\[\mu(n)=\begin{cases} 1 \quad\quad\quad\quad n=1 \\\\ (-1)^{m} \quad \prod_{i=1}^{m}k_{i}=1 \\\\ 0 \quad\quad\quad\quad otherwise \end{cases}\]

  • 莫比乌斯函数是积性函数,即\(\mu(a)\mu(b)=\mu(a \cdot b)\)

  • \(\sum_{d|n} \mu(d)=[n=1]\) ,这一点根据二项式定理即可证明

2.线性筛莫比乌斯函数

需要用到的性质
根据 \(\mu\) 的性质可以得到,如果 \(n=p*m\) ,其中 \(p\)\(n\) 的质因子,如果 \(p|m\) 那么显然 \(\mu(n)=0\) ,否则 \(\mu(n)=-\mu(m)\)

miu[1]=1;
For (i,2,n) {
	if (!vis[i]) {
		p[++N]=i;
		miu[i]=-1;
	}
	For (j,1,N) {
		if (i*p[j]>n) break;
		vis[i*p[j]]=1;
		if (i%p[j]==0) {
			miu[i*p[j]]=0;
			break;
		}
		else
			miu[i*p[j]]=-miu[i];
	}
}

(四)约数个数\(d(n)\)

如果 \(d(n)\)\(n\) 的约数个数,那么

\[d(nm)=\sum_{i|n}\sum_{j|m}[gcd(i,j)=1] \]

\(nm=p_{1}^{x_{1}}*...*p_{k}^{x_{k}}\),且 \(n=p_{1}^{y_{1}}*...*p_{k}^{y_{k}}\),那么 \(m=p_{1}^{x_{1}-y_{1}}*...*p_{k}^{x_{k}-y_{k}}\)
\(i=p_{1}^{a_{1}}*...*p_{k}^{a_{k}}\)\(j=p_{1}^{b_{1}}*...*p_{k}^{b_{k}}\)
要使得 \(gcd(i,j)=1\) 必须要 \(a_{i}\) 或者 \(b_{i}\) 等于 \(0\),如果 \(a_{i}\) 等于 \(0\),那么 \(b_{i}\) 共有 \(x_{i}-y_{i}+1\) 种选择,如果 \(b_{i}\) 等于\(0\),那么 \(a_{i}\) 共有 \(y_{i}+1\) 种选择,总共 \(x_{i}+1\) 种,所以满足条件的\(i,j\)的个数为\(\prod(x_{i}+1)\)

(五)奇葩函数

1.\(f(n)=\sum_{d|n}d\mu(d)\)

\[f(n)=\sum_{d|n}d\mu(d)=\prod_{p_{i}}f(p_{i}^{x_{i}})=\prod_{p_{i}}(\sum_{d|p_{i}^{x_{i}}}d\mu(d))=\prod_{p_{i}}(1-p_{i}) \]

f[1]=1;
For (i,2,maxx) {
	if (!vis[i]) {
		p[++N]=i; f[i]=1-i;
	}
	For (j,1,N) {
		int k=i*p[j];
		if (k>maxx) break;
		vis[k]=1;
		if (i%p[j]==0) {
			f[k]=f[i]; break;
		}
		else f[k]=f[i]*(1-p[j]);
	}
}
posted @ 2018-03-24 17:22  Wuweizheng  阅读(1845)  评论(0编辑  收藏  举报