我只拿了60分。
#include<bits/stdc++.h>
using namespace std;
int n,fa[10000010],tot=0;
long long ans=0;
inline int find(int k)
{
if(k==fa[k]) return fa[k];
else return fa[k]=find(fa[k]);
}
int main()
{
scanf("%d",&n);
for(register int i=1;i<=n;i++) fa[i]=i;
for(register int i=n/2;i>=1;i--)
{
for(register int j=i*2;j<=n;j+=i)
{
int fx=find(i),fy=find(j);
if(fx==fy) continue;
fa[fx]=fy,ans+=i,tot++;
if(tot==n-1) break;
}
if(tot==n-1) break;
}
printf("%lld",ans);
return 0;
}