Cod sursa(job #1380560)

Utilizator andreisecAndrei Tudor andreisec Data 8 martie 2015 02:16:27
Problema Fractii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<stdio.h>

int cmmdc(int a, int b)
{
    if (a == 0)
       return b;
    while (b > 0)
        if (a > b)
           a = a - b;
        else
           b = b - a;
    return a;
}


int main(){
    unsigned int i,j,M;
    FILE *in,*out;

    in = fopen("fractii.in","r");
    out = fopen("fractii.out","w+");
    if(!fscanf(in, "%d\n", &M)) return 1;
    
    printf("DBG: %d\n",M);
    unsigned long long count = 1;//i=1,j=1
    unsigned long long phi[M];

for (int i = 1; i <= M; ++i)
    phi[i] = i-1;
for (int i = 2; i <= M; ++i)
    for (int j = 2*i; j <= M; j += i)
        {
             phi[j] -= phi[i];    
             //if (phi[j]<0)
                //printf("%d ",i);
                }
//for (i=1;i<=M;i++) phi[i]=i;
//
//for (i=2;i<=M;i++)
//   if (phi[i]==i)
//      for (j=i;j<=M;j+=i) phi[j] /=i, phi[j] *= (i-1);
   
    for (i=1;i<=M;i++){
        count += 2*phi[i];
        //trys = phi[i];
//        for (j=1;j<=i && trys>0;j++)
//            if (i==1 || j==1)
//                count+=2;
//            else
//                if (cmmdc(i,j)==1){
//                    count+=2;
//                    trys--;
//                    //printf("%d %d\n",i,j); 
//                }
    }
    fprintf(out,"%lld",count);
    fclose(in);
    fclose(out);

    //printf("%lld", count);
    //getchar();
    return 0;
    
}