杜教筛

int summu(int n){
	if(n<=maxn) return mu[n];
	if(smu.find(n)!=smu.end()) return smu[n];
	int sh=1;
	for(int l=2,r;l<=n;l=r+1){
		r=n/(n/l);
		sh-=(r-l+1)*summu(n/l);
	}
	return smu[n]=sh;
}
int sumphi(int n){
	if(n<=maxn) return phi[n];
	if(sphi.find(n)!=sphi.end()) return sphi[n];
	int sh=(1+n)*n/2;
	for(int l=2,r;l<=n;l=r+1){
		r=n/(n/l);
		sh-=(r-l+1)*sumphi(n/l);
	}
	return sphi[n]=sh;
}
posted @ 2023-12-20 11:37  hubingshan  阅读(19)  评论(0)    收藏  举报