Cod sursa(job #230473)

Utilizator mISHOOOmISHOOO mISHOOO Data 14 decembrie 2008 00:21:10
Problema Fractii Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h> 
#include <math.h>
  
FILE *fi = fopen("fractii.in", "r");  
FILE *fo = fopen("fractii.out", "w");  
  
unsigned long long int NF = 1;  
long N;  
   
int prim(long X) {  
    long D=3;  
  
    if (X%2 == 0) return 0;  
  
    while (D*D<=X) {  
        if (X%D == 0) return 0;  
        D+=2;  
    }  
  
    return 1;  
}  
  
unsigned long long int totient(long X) {  
    long D=2, k=0;  
    unsigned long long int NF = 0;  
  
    if (X==1) return 1;  
    if (prim(X)) return X-1;  
      
    while (X%D) D++;  
    while (X%D == 0) { X/=D;k++; }  
          
    NF += (long)(int)pow((double)D, (double)k-1)*(D-1)* totient(X);  
      
    return NF;  
}  
  
int main() {  
    fscanf(fi, "%ld", &N);  
      
    for (long i=2; i<=N; i++) {  
        NF+=totient(i)*2;  
    }  
  
    fprintf(fo, "%llu\n", NF);  
          
    fclose(fi);  
    fclose(fo);  
  
    return 0;  
}