码迷,mamicode.com
首页 > 其他好文 > 详细

莫反 复习

时间:2021-04-27 15:07:10      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:质数   快速   自然数   一个   int   完全   结果   时间   线性   

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

定义完全积性函数:定义域在\(>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)\)

莫反 复习

标签:质数   快速   自然数   一个   int   完全   结果   时间   线性   

原文地址:https://www.cnblogs.com/ctmlpfs/p/14707324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!