Gcd
【题目描述】
给定整数
N
,求
【输入描述】
一个整数 N
【输出描述】
如题。
【样例输入】
4
【样例输出】
4
【Solution】
【Code】
#include <iostream>
#include <cstdio>
#include <cmath>
#define LL long long
using namespace std;
LL n,ans;
bool no_prime[10000010];
int prime[10000010];
int phi[10000010];
LL sum[10000010];
int main(){
scanf("%lld",&n);
phi[1]=1;
no_prime[1]=true;
phi[0]=0;
for(LL i=2;i<=n;i++){
if(!no_prime[i]){
prime[++prime[0]]=i;
phi[i]=i-1;
}
for(LL j=1;prime[j]*i<=n;j++){
no_prime[i*prime[j]]=true;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
for(LL i=1;i<=n;i++)sum[i]=sum[i-1]+phi[i];
for(LL i=1;i<=prime[0];i++)ans+=sum[n/prime[i]]*2-1;
printf("%lld\n",ans);
return 0;
}