比赛 2025.5.4 评测结果 AAAAAAAAAA
题目名称 GCD 最终得分 100
用户昵称 djyqjy 运行时间 2.312 s
代码语言 C++ 内存使用 94.38 MiB
提交时间 2025-05-04 11:58:28
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int re()
{
    int f=1,num=0;
    char c=getchar();
    while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
    return num*f;
}
const int N=10000010;
int phi[N],prime[N],jsq;
bool mark[N];
void init()
{
    phi[1]=mark[1]=1;
    for(int i=2;i+10<=N;i++)
    {
        if(mark[i]==0) prime[++jsq]=i,phi[i]=i-1;
        for(int j=1;j<=jsq;j++)
        {
            if(i*prime[j]>N-10) break;
            mark[i*prime[j]]=1;
            if(i%prime[j]==0)
            {
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            phi[i*prime[j]]=phi[i]*phi[prime[j]];
        }
    }
    for(int i=1;i+10<=N;i++) phi[i]+=phi[i-1];
    return;
}
int n,ans;
signed main()
{
    freopen("gcd_prime.in","r",stdin);
    freopen("gcd_prime.out","w",stdout);
    init();
    n=re();
    for(int i=1;i<=jsq;i++)
    {
        if(prime[i]>n) break;
        ans+=2*phi[n/prime[i]]-1;
    }
    printf("%lld",ans);
    return 0;
}