比赛 2025.5.4 评测结果 AAAAAAAAAA
题目名称 GCD 最终得分 100
用户昵称 wdsjl 运行时间 0.634 s
代码语言 C++ 内存使用 39.46 MiB
提交时间 2025-05-04 11:29:57
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#define int long long
using namespace std;

const int N = 1e7+10;

bool bk[N];

vector <int> pm;

int res,phi[N],sum[N],n;

void shai(int n){
	for(int i=2;i<=n;i++){
		if(!bk[i]){
			pm.push_back(i);
			phi[i]=i-1;
		}
		for(int j:pm){
			if(i*j>n)break;
			bk[i*j]=true;
			if(i%j==0){
				phi[i*j]=phi[i]*j;
				break;
			}else{
				phi[i*j]=phi[i]*(j-1);
			}
		}
	}
	for(int i=1;i<=n;i++){
		sum[i]=sum[i-1]+phi[i];
	}
} 

signed main(){
	freopen("gcd_prime.in","r",stdin);
	freopen("gcd_prime.out","w",stdout);
	scanf("%lld",&n);
	phi[1]=1;
	shai(n);
	for(int i=0;i<pm.size();i++){
		res+=2*sum[n/pm[i]]-1;
	}
	printf("%lld",res);
	return 0;
}