1.n为素数, G(n) = n
2.n只有1个素因子p,G(n) = p
3.n有多个素因子,G(n) = 1
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000005
typedef long long ll;
bool isprime[maxn];
ll F[maxn];
int f[maxn];
void init()
{
memset(isprime,false,sizeof isprime);
memset(f,-1,sizeof f);
for(int i=2;i<maxn;i++)
{
if(!isprime[i])
{
f[i]=i;
for(int j=2;i*j<maxn;j++)
{
isprime[i*j]=true;
if(f[i*j]==-1) f[i*j]=i;
else f[i*j]=1;
}
}
}
}
void work()
{
F[3]=f[3];
for(int i=4;i<maxn;i++)
{
F[i]=F[i-1]+f[i];
}
}
int main()
{
init();
work();
int n;
while(~scanf("%d",&n))
{
printf("%lld\n",F[n]);
}
return 0;
}