大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。

【转】线性筛约数个数和、约数和

click here

当然如果复杂度允许的话还是用埃氏筛吧

下面给个模板:

约数个数和

\(O(nlogn)\)

go(i,1,n)
	for(int j=i;j<=n;j+=i)
		++d[j];

约数和

\(O(nlogn)\)

go(i,1,n)
	for(int j=i;j<=n;j+=i)
		sd[j]+=i;

\(O(n)\)

sd[1]=1;
go(i,2,n){
	if(!vis[i]) p[++tot]=i,num[i]=sd[i]=i+1;
	for(int j=1;j<=tot&&p[j]*i<=n;++j){
		vis[p[j]*i]=1;
		if(i%p[j]==0){
			sd[p[j]*i]=sd[i]/num[i]*(num[i]*p[j]+1);
			num[p[j]*i]=num[i]*p[j]+1;
			break;
		}
		else{
			sd[p[j]*i]=sd[i]*sd[p[j]];
			num[p[j]*i]=p[j]+1;
		}
	}
}
posted @ 2019-09-14 09:50  White_star  阅读(187)  评论(0编辑  收藏  举报
}