数论分块总结

**~~

数论分块总结

**~~
加速运算形似数论分块总结_第1张图片
的式子
证明:
数论分块总结_第2张图片
在这里插入图片描述
(这东西好像俩叫法 数论/整除 分块)
模板

//for中l,r的类型若不会爆int 尽量int而不ll
ll n,ans=0;
sl(n);		
for(ll l=1,r;l<=n;l=r+1){
	r=n/(n/l);
	ans+=(r-l+1)*(n/l)//l r范围内 k/i值相同
	//if(k/l!=0) r=min(k/(k/l),n); 若为对k/i求和
	//else r=n;//l r范围内 k/i值相同
}

一些变形
(1)
数论分块总结_第3张图片
二维扩展

for(ll l=1,r;l<=min(n,m);l=r+1){
	r=min(n/(n/l),m/(m/l));
	ans+=(r-l+1)*(n/l)*(m/l);
}

(2)
在这里插入图片描述
在这里插入图片描述
将(r-l+1)替换为对应求和式即可(其他函数的话换成相应前缀和处理即可)

1)ans+=(l+r)*(r-l+1)/2 *(n/l);
(2int cal(int x){return x*(x+1)*(2*x+1)/6;} 
	 ans+=(cal(r)-cal(l-1))*(n/l);

(3)
在这里插入图片描述
在这里插入图片描述

for(ll l=1,r;l<=n;l=r+1){
    r=n/(n/l);
    ans+=(l+r)*(r-l+1)/2*(1+n/l)*(n/l)/2;	
}

(4) ∑ i = 1 n ⌊ n i ∗ i ⌋ \sum_{i=1}^n\left \lfloor \frac{n}{i*i} \right \rfloor i=1niin

for(ll l=1,r;l<=n;l=r+1){
	if(l*l>n) break;
	r=sqrt(n/(n/(l*l)));
	ans+=(r-l+1)*(n/(l*l));
}

你可能感兴趣的:(数论)