Cod sursa(job #233409)

Utilizator mihai.cuculiciCuculici Mihail mihai.cuculici Data 17 decembrie 2008 19:06:06
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>   
#include <math.h>   
using namespace std;

ifstream f ("fractii.in");
ofstream g ("fractii.out");
     
char V[1000000];   
unsigned long long int rez = 1;     
  
long n;     
  
void gen_prim()
{   
    for(int i=3;i<=1000000;i+=2)
      if(V[i]==0)   
        for(int j=i*3;j<=1000000;j+=2*i) V[j] = 1;   
}   
     
unsigned long long int totient(long nr)
{     
    long start=2, k=0;     
    unsigned long long int NF = 0;     
    if(nr==1) return 1;  
    if(nr%2 && V[nr] == 0) return nr-1;   
    while (nr%start) start++;   
    while (nr%start == 0) { nr/=start;k++; }     
    NF+=(long)(int)pow((double)start,(double)k-1)*(start-1)* totient(nr);     
    return NF;     
}     
     
int main()
{     
    f>>n;
    gen_prim();   
    for(long i=2;i<=n;i++)
    {     
        rez+=totient(i)*2;     
    }   
    g<<rez<<"\n";     
    f.close();     
    g.close();    
    return 0;     
}