Cod sursa(job #2464732)

Utilizator DanDumitrescudarkeagle DanDumitrescu Data 28 septembrie 2019 20:50:05
Problema Fractii Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
/*#include <iostream>
#include<cstdio>
#include<cmath>
FILE * f=fopen("fractii.in","r");
FILE * g=fopen("fractii.out","w");
using namespace std;
long long int n;

long long int phi[1000007];
int main()
{ long long int t=0,i,j;

fscanf(f,"%lld",&n);

for ( i = 1; i <= n; ++i)
    phi[i] = i-1;
for ( i = 2; i <= n; ++i)
    for ( j = 2*i; j <= n; j += i)
        phi[j] -= phi[i];
        for(i=1;i<=n;i++)
           t=t+2*phi[i];
        fprintf(g,"%lld",t+1);

return 0;
}*/
#include <cstdio>
#include <cmath>
#include<iostream>
 FILE * f=fopen("fractii.in","r");
FILE * g=fopen("fractii.out","w");
using namespace std;
long int  v[1000001],p,e,y,n,z,i,j,x,nrf;
long long  int nr,rad;
int main ()
{

fscanf(f,"%lld",&n);
v[1]=1;

for (i=2;i<=n;i++)
 { x=i;
   p=2;
   z=1;
   rad=sqrt(x);
   while (p<=rad && x%p>=1) p++;
   if (p>rad) v[i]=i-1;
    else {
     y=x;
     e=0;
    while (y%p==0)
       { y/=p;
     e++;
     z=z*p;
       }
   z=z/p;
  v[x]=v[y]*(p-1)*z;
  }}
nr=1;
for (i=2;i<=n;i++)
 nr=nr+2*v[i];
fprintf(g,"%lld",nr);

return 0;
}