Cod sursa(job #1074404)
| Utilizator | Data | 7 ianuarie 2014 17:23:45 | |
|---|---|---|---|
| Problema | Fractii | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.6 kb |
#include <iostream>
using namespace std;
int E[1000001],D[1000001],PHI[1000001],a,b,x;
long long rez;
int n,i,j;
int main()
{
cin>>n;
for(i=2;i<=n;i++)
E[i]=1;
for(i=2;i<=n;i++)
if(E[i]==1)
{
PHI[i]=i-1;
D[i]=i;
for(j=i+i;j<=n;j+=i)
{
E[j]=0;
D[j]=i;
}
}
for(i=2;i<=n;i++)
if(E[i]==0)
{
x=i;
a=1;
while (x%D[i]==0)
{
a=a*D[i];
x=x/D[i];
}
b=i/a;
if (b!=1)
PHI[i]=PHI[a]*PHI[b];
else
PHI[i]=a/D[i]*(D[i]-1);
}
PHI[1]=1;
for(i=1;i<=n;i++)
rez+=PHI[i];
cout<<rez*2-1<<'\n';
return 0;
}
