Cod sursa(job #112801)

Utilizator Poisoned_IvyAnda Nicolae Poisoned_Ivy Data 7 decembrie 2007 20:34:25
Problema Fractii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>
unsigned long n;
int* totient;



/*unsigned long cmmdc(unsigned long a, unsigned long b)
{
    if (a==b) return a;
    if (a>b) return cmmdc(a-b,b);
    return cmmdc(a, b-a);
}



unsigned long div(unsigned long k)
{ 
         unsigned long i,x;
         x=0;
         for (i=1; i<k; i++)
             if (cmmdc(i,k)==1) x++;
         return x;
}



unsigned long det(unsigned long n)
{
         unsigned long i,p;
         p=0;
         for (i=2; i<=n; i++)
          p=p+div(i);
         p=2*p+1;
         return p;
}



unsigned long calcul(unsigned long a, unsigned long b, unsigned long x, unsigned long y, unsigned long n)
{
    if (b+y>n) return 0;
    return 1+calcul(a,b,a+x,b+y,n)+calcul(a+x,b+y,x,y,n);
}*/


unsigned long calcul(int n)
{
         int i,j,s=0;
         for (i=0; i<=n; i++)
             totient[i]=i;
         for (i=2; i<n; i++)
             for (j=i+1; j<=n; j++)
                 if (j%i==0) totient[j]=totient[j]*(i-1)/i;
         for (i=2; i<=n; i++)
         {
             if (totient[i]==i) totient[i]=i-1;
             s+=totient[i];
         }
         return s;
}


int main()
{
    FILE *f, *g;
    f=fopen("fractii.in","r");
    fscanf(f,"%lu",&n);
    totient=(int*) malloc ((n+1)*sizeof(int));
    g=fopen("fractii.out","w");
    fprintf(g,"%lu",2*calcul(n)+1);
    return 0;
}