现在的位置: 首页 > 编程语言 > 正文

【数论函数变换总结】【超长篇】【last update:2014-10-22】

2017年04月19日 编程语言 ⁄ 共 1196字 ⁄ 字号 评论关闭

最近被好多数论题虐翻……感觉学到了不少东西,总结一下

参考文献

数论函数变换 orz kAc http://pan.baidu.com/s/1mgn4oqO

数学常识
orz 
drcow http://pan.baidu.com/s/1mgGA4UO

积性函数..题目
orz 
jcvb http://jcvb.is-programmer.com/posts/41846.html

贾志鹏线性筛
orz 
jzp http://wenku.baidu.com/link?url=9spLgiNU8yom2-paqarcDfsbAzLUgyYwalwv7V5K8W-lGl4qS_seaX-NlOukspGTDltU1tVhNPlBF76QKtvnDyxDxl-wL6BRxVWiWGiFipm

莫比乌斯反演是指


狄利克雷卷积是指

所以莫比乌斯反演又可以写作


顺便定义一下


常见数论函数

欧拉函数


莫比乌斯函数

其他常见数论函数






常见变换



有了以上基础我们就来推式子了!!!

1D gcd sum


1..n中与n互质的数的个数


2D gcd sum


1..n和1..m中互质的数的对数


约数和之和


公约数约数和


1..n中与n互质的数的和


1D lcm sum


1..n与1..m所有数对的乘积和


1..n与1..m中互质的数对的乘积和


2D lcm sum level 1


我们定义一个函数


它不是整数……但很有用

顺手定义



2D lcm sum level 2


上面这个式子最后一行的Sum前面应该加上"(d)"= = 、

积性函数筛出来,分块统计

怎样分块统计?

n/d,m/d最多有sqrt(n)+sqrt(m)中取值

f是非分块统计部分的[i,j]的区间和

Sum代表的是一系列可以分块统计的函数

for(int i=1,j;i<=n;i=j+1){
	j=min(n/(n/i),m/(m/i));
	ans+=(f[j]-f[i-1])*(Sum(n/i,m/i));
}

怎样线性筛积性函数?

for(int i=2;i<maxn;i++){
	if(!p[i]){
		prime[++prime[0]]=i;
		//A
	}for(int j=1;j<=prime[0]&&i*prime[j]<maxn;j++){
		p[i*prime[j]]=1;
		if(i%prime[j]==0){
			//B
			break;
		}else{
			//C
		}
	}
}

欧拉筛把积性函数f(n)分成了三类

A:n为质数

B:n最小质因子为p且次数大于1

C:n最小质因子为p且次数为1
现在我们要计算一个积性函数f(n)

A:质数通常很简单,特判

C:显然i与p互质那么
B类比较复杂

但显然

所以我们记录n的最小质因子的幂

问题转化为如何求

这就与函数本身相关了

比如


对于2D lcm sum level 2


宇宙最快求和法


那么


在g函数前缀和O(1)计算的情况下,记忆化搜索可以证明复杂度是,小范围预处理会得到更好的复杂度

但是……


用上述方法是可以做的

不过具体数学说……


于是


真是太神了……有空再研究吧……


【未完待续】


抱歉!评论已关闭.