其他分享
首页 > 其他分享> > 莫反 复习

莫反 复习

作者:互联网

模拟赛考了一道莫反结果只写了低档暴力

定义完全积性函数:定义域在\(>0\)的自然数内。
有\(f(ab)=f(a)f(b)\)
例子:\(f(a)=a\)

定义积性函数:如果\((a,b)=1,f(ab)=f(a)f(b)\)
推论:设\(a\)的唯一分解:\(p_1^{b1}p_2^{b2}...p_n^{bn}\),则\(f(a)=f(p_1^{b1})f(p_2^{b2})...f(p_n^{bn})\)

积性函数的求法:线性筛。
在遍历所有倍数的过程中:
要求当\(i\mod p=0\)时,则\(f(ip)\)的值能够被算出。
当\(i\mod p\neq 0\)时,按照积性函数的性质计算\(f(ip)\)
所以线性筛法要求:在质数处的取值能够快速算出,一个数和质数的乘积的函数值可以快速算出。
事实上,根据素数定理,我们只需要做\(\frac{n}{\log_2n}\)次函数在质数处的求值。
这使得我们可以在几乎线性的时间内求出所有\(i^k\)。

定义两个函数的dirchlet卷积:\(h(n)=\sum f(\frac{n}{i})g(i)\)
其中\(i|n\)

定义mobius函数\(u\)。
它的函数值:
当\(a=1\),\(u(a)=1\)
设\(a\)的唯一分解:\(p_1^{b1}p_2^{b2}...p_n^{bn}\)
当\(b_1=b_2=...=b_n=1\),则\(u(a)=(-1)^n\)
否则\(u(a)=0\)
这事实上满足上面筛法对与积性函数的约定,所以可以线性筛求出。

定义dirchlet前缀和:\(b(n)=\sum a(\frac{n}{i})\),其中\(i|n\)
它有两种做法:
做法1:枚举\(a(x)\),贡献到\(x\)的倍数。
时间复杂度\(O(n\log_2n)\)
做法2:魔力筛

void si(int *a){
	for(int i=1;p[i]<=n;i++)
		for(int j=1;j*p[i]<=n;j++)
			a[j*p[i]]+=a[j];
}

\(p\)是素数表。
考虑\(j\)的唯一分解,发现事实上它是在按照质数从小到大的顺序做高维前缀和。
这就证明了它的正确性
可以证明时间复杂度是\(O(n\log_2\log_2n)\)

标签:...,复习,积性,质数,定义,莫反,log,函数
来源: https://www.cnblogs.com/ctmlpfs/p/14707324.html