Cod sursa(job #1380542)

Utilizator andreisecAndrei Tudor andreisec Data 8 martie 2015 01:02:18
Problema Fractii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 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(){
    int i,j,M, trys;
    FILE *in,*out;

    in = fopen("fractii.in","r");
    out = fopen("fractii.out","w+");
    if(!fscanf(in, "%d\n", &M)) return 1;
    
    int count = -1;//i=1,j=1
    int 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];    

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++){
        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,"%d",count);
    fclose(in);
    fclose(out);
    printf("%d", count);
    getchar();
    return 0;
    
}