Cod sursa(job #1175901)

Utilizator doghy1993Doaga Alin doghy1993 Data 25 aprilie 2014 05:35:20
Problema Fractii Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 2.2 kb
#include<stdio.h>
#include<stdlib.h>
int* generare(int *n)
{
    char tabel[*n];
    int *prime = NULL;
    int contor=0;
    int i,j;
    for(i=0;i<*n;i++)
        tabel[i]=0;

    for(i=2;i<*n;++i)
    {
        if(tabel[i]==0)
        {
            contor++;
            for(j=i+i;j<*n;j=j+i)
            {
                tabel[j]=1;
            }
        }
    }

    prime = (int*)malloc(contor*sizeof(int));
    contor = 0;
    for(i=2;i<*n;++i)
        if(tabel[i]==0)
            prime[contor++] = i;
    *n = contor;
    return prime;

}
void citire(int *n)
{
    FILE *input=fopen("fractii.in","r");
    if(input==NULL)
        printf("S-a detectat o eroare la deschiderea fisierului\n");

    fscanf(input,"%i",n);
    fclose(input);

}
int compunere(int n,int *prime,int m)
{
    int contor=0;
    int i,j;
    int k=0;
    int total=n;
    for(i=1;i<=n;i++)
    {
        if(i%2==0)
        {
            for(j=3;j<=n;j=j+2)
            {
                contor=0;
                for(k=0;k<=i && k<=j && k<m;k++)
                {
                    if(i%prime[k]==0 && j%prime[k]==0)
                    {
                        contor++;
                        break;
                    }
                }
                if(contor==0)
                    total++;
            }
        }
        else
        {
             for(j=2;j<=n;j++)
             {
                 contor=0;
                 for(k=0;k<=i && k<=j && k<m;k++)
                 {
                    if(i%prime[k]==0 && j%prime[k]==0)
                    {
                        contor++;
                        break;
                    }
                 }
                if(contor==0)
                    total++;
             }
        }
       // printf("\n");
    }
    return total;
}
void afisare(int rezutat)
{
    FILE *output=fopen("fractii.out","w");
    fprintf(output,"%i",rezutat);
    fclose(output);
}
void procesare()
{
    int n,i;
    citire(&n);
    int m=n;
    int *prime=NULL;
    prime=generare(&m);
    int rezultat=compunere(n,prime,m);

    afisare(rezultat);
}
int main()
{
    procesare();

    return 0;
}