Pagini recente » Cod sursa (job #2114372) | Cod sursa (job #128947) | Diferente pentru blog/viata-dupa-olimpiade-1 intre reviziile 29 si 28 | Ciorna | Cod sursa (job #2279849)
#include <bits/stdc++.h>
using namespace std;
const long N=1e6+5;
long n,f[N],snt[N],top;
long long ans=0;
void sang()
{
for(long i=2;i<=n;++i)
{
if(f[i]==0)
f[i]=snt[++top]=i;
for(long j=1;j<=top;++j)
{
if(snt[j]>f[i]||snt[j]*i>=N)break;
f[snt[j]*i]=snt[j];
}
}
}
void lam()
{
long val,res,pos;
for(long i=1;i<=n;++i)
{
res=i;
val=i;
while(val>1)
{
pos=f[val];
res=res*(pos-1)/pos;
while(val%pos==0)val/=pos;
}
ans+=res;
}
cout<<2*ans-1;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
freopen("Fractii.inp","r",stdin);
freopen("Fractii.out","w",stdout);
cin>>n;
sang();
lam();
return 0;
}