Cod sursa(job #330658)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 11 iulie 2009 03:08:14
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<fstream>
#include<math.h>
using namespace std;
int prim[1000001];int n;
double totient(int a)
 {if(a==1) return 1;
       if(prim[a]==1) return (a-1);
 
 else {int div; 
      for(int k=a-1;k>=2;k--) if(prim[k]==1 && a%k==0) {div=k; break;}
      int 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; 

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