WA 18分悬关
查看原帖
WA 18分悬关
1366699
programmer330楼主2024/11/21 21:00
#include<bits/stdc++.h>
using namespace std;
int phi[40010];
int prime[40010],tot=0;
bool flag[40010];
void eular(int n){
	phi[1]=1;
	for(int i=2;i<=n;i++){
		if(!flag[i]){
			prime[++tot]=i;
			phi[i]=i-1;
			
		}
		for(int j=1;j<=tot&&i*prime[j]<=n;j++){
			flag[i*prime[j]]==1;
			if(i%prime[j]==0){
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			}else{
				phi[i*prime[j]]=phi[i]*phi[prime[j]];
			}
		}
	}
}
int main(){
	int n,ans=1;
	cin>>n;
	if(n==1){
		cout<<0;
		return 0;
		
	}
	eular(n);
	for(int i=1;i<=n-1;i++){
		ans+=2*phi[i];
	}
	cout<<ans;

	return 0;
}

2024/11/21 21:00
加载中...