9,10WA求助
查看原帖
9,10WA求助
520448
kevin080213楼主2024/5/31 15:20
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
typedef long long LL;
const LL N=2e6+10;

LL n;
LL prime[N],st[N],cnt,mobius[N];
LL ans;

void init(){
	mobius[1]=1;
	for(LL i=2;i<N;i++){
		if(!st[i]){
			st[i]=1;
			prime[++cnt]=i;
			mobius[i]=-1;
		}
		for(LL j=1;prime[j]<N/i;j++){
			st[prime[j]*i]=1;
			if(i%prime[j]==0)break;
			mobius[prime[j]*i]=-mobius[i];
		}
	}
	
	for(LL i=1;i<N;i++)mobius[i]+=mobius[i-1];
}

LL calc(LL n,LL d){
	n/=d;
	LL res=0;
	for(LL l=1,r;l<=n;l=r+1){
		LL t=n/l;
		r=min(n,n/t);
		res+=(mobius[r]-mobius[l-1])*t*t;
	}
	return res;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);

	init();
	cin>>n;
	for(LL i=1;i<=n;i++)ans+=calc(n,i)*i;
	
	ans-=n*(n+1)/2;
	ans/=2;
	cout<<ans;

	return 0;
}

把数组开大一点就能A,求助。

2024/5/31 15:20
加载中...