Cod sursa(job #330661)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 11 iulie 2009 03:14:29
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream>
#include<math.h>
using namespace std;
int prim[1000001];int n;
long totient(long a)
 {if(a==1) return 1;
       if(prim[a]==1) return (a-1);
 
 else {long div; 
      for(long k=2;k<=sqrt(a);k++) if(prim[k]==1 && a%k==0) {div=k;break;}
      long contor=0,piv=a;
      while(piv%div==0){contor++;piv=piv/div;}
     
      return pow(div,contor-1)*(div-1)*totient(piv);
      
      }
                
                
                }
int main()
{ifstream in("fractii.in");
ofstream out("fractii.out");
in>>n;
for(int i=1;i<=n;i++) prim[i]=1;
for(int i=2;i<=n;i++)
 if(prim[i]==1) for(int j=i+i;j<=n;j+=i)
                 prim[j]=0; 

long total=0;
for(int i=2;i<=n;i++) total+=totient(i);
total=2*total+1;
out<<total;
return 0;
}