数论分块

模板


即求 i=1nni的值

y=n/i

奇妙题解

参考

i=1nni=2i=1nnin2

int h(cs int x)
{
	int s=sqrt(x),re=0;
	for(ri int i(1);i<=s;++i) re+=x/i;
	return re*2-s*s;
}

(还没验证正确性
upd10.29:AC

一般化

参考

某段数满足:

nl=nl+1=nl+2==nr1=nr

nlnr<nl+1

rnnl,rmax=nnl

i=lrf(ni)=(nnll+1)×nl

int h(cs int x)
{
	if(!x) return 0;
	int re=0,j;
	for(ri int i(1);i<=x;i=j+1)
		j=x/(x/i),re+=(j-i+1)*(x/i);
	return re;
}

P2261 [CQOI2007]余数求和

参考

ans=i=1nkmodi

amodb=ab×ab

ans=i=1nki×ki=n×ki=1ni×ki

然后整除分块

signed main()
{
	read(n),read(k);
	for(ri int l(1),r;l<=n;l=r+1)
	{
		if(k/l) r=min(k/(k/l),n);
		else r=n;
		ans-=(k/l)*(r-l+1)*(l+r)>>1;
	}
	wt(ans+n*k);
	return 0;
}
posted @   Bertidurlah  阅读(26)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示