Cod sursa(job #2246389)

Utilizator sorgeTrifescu Stefan-Octavian sorge Data 27 septembrie 2018 02:28:56
Problema Fractii Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct{
    int numar,putere;
}pereche;
void descompunereFactoriPrimi(pereche*v,int*dim,int n){
    *dim=0;

    int d=2;
    while(n>1){
        pereche p;
        p.numar=d;
        p.putere=0;
        while(n%d==0){
            ++p.putere;
            n/=d;
        }
        if(p.putere!=0){
            v[(*dim)++]=p;
        }
        d++;
    }

}
int fi(int n){
    pereche*v=(pereche*)malloc(sizeof(pereche)*10000);
    int dim=0,i=0,phi=1;
    descompunereFactoriPrimi(v,&dim,n);

    for(i=0;i<dim;++i){
        phi*=(v[i].numar-1)*pow(v[i].numar,v[i].putere-1);
    }
    return phi;
}
int main()
{
    int n=0,err=0,i=0,result=0,anteriorResult=0;
    FILE*fp;
    fp=fopen("fractii.in","r");
    if(fp==NULL)
        perror("Eroare la deschiderea fisierului pentru citire!");

    err=fscanf(fp,"%d",&n);
    if(err==-1)
        perror("Eroare la citire!");

    fclose(fp);

    for(i=1;i<=n;++i){
        if(i==1)
            result=1;
        else{
            result=2*fi(i)+anteriorResult;
        }
        anteriorResult=result;
    }

    fp=fopen("fractii.out","w");
    if(fp==NULL)
        perror("Eroare la deschiderea fisierului pentru scriere!");
    fprintf(fp,"%d",result);
    fclose(fp);





   return 0;
}