Cod sursa(job #1158820)

Utilizator raduraraduIacob Radu raduraradu Data 29 martie 2014 09:32:39
Problema Fractii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
int main()
{
   long long  n,i,j,nr,phi,r=0,prim[100000],d;
   int k=1;
   prim[1]=2;
   bool ok;
   f>>n;
   for(i=3;i<=n;i+=2)
   {
       ok=1;
       for(d=3;d<=sqrt(i);d+=2)
        if(i%d==0)
       {
           ok=0;
           break;
       }
       if(ok)
       {
           k++;
           prim[k]=i;
       }
   }

   r=1;
   for(i=2;i<=n;i++)
   {
       nr=i;
       phi=nr;
       for(j=1;prim[j]<=sqrt(nr);j++)
       {
           if(nr%prim[j]==0)
           phi=(phi*(prim[j]-1))/prim[j];
           while(nr%prim[j]==0)
            nr/=prim[j];
       }

       if(nr>1)
        phi=(phi*(nr-1))/nr;
       r+=2*phi;
   }
   g<<r;
}