Cod sursa(job #2334839)

Utilizator alin_uAlin Ungureanu alin_u Data 3 februarie 2019 10:41:57
Problema Fractii Scor 10
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <stdio.h>
#include <math.h>

unsigned int N;
unsigned int C; //counts the irreducible fractions
int FareySeq[1000001];

#define True  (1==1)
#define False (1==0)

unsigned char irreducible(unsigned int n, unsigned int m)
{
    register unsigned int i;
    unsigned int divMax = (unsigned int)sqrt(m);

    if (m % n == 0)
    {
        return False;
    }

    for (i = 2; i <= divMax; ++i)
    {
        if (n % i == 0 && m % i == 0)
        {

            return False;
        }
    }

    return True;
}


int main(void)
{
    register unsigned int i, j;
    FILE * fp;
    C = 0;
    register int partialSum = 0;
    //read input
    fp = fopen("fractii.in", "r");
    i = fscanf(fp, "%d", &N);
    fclose(fp);


    //initFarey Seq
    FareySeq[1] = 2;
    FareySeq[2] = 3;
    FareySeq[3] = 5;
    FareySeq[4] = 7;
    FareySeq[5] = 11;
    FareySeq[6] = 13;
    FareySeq[7] = 19;
    FareySeq[8] = 23;
    for (i = 9; i <= N; ++i)
    {
        partialSum = ((i + 3) * i)/2;
        for (j = 2; j <= i; ++j)
        {
            partialSum -= FareySeq[i/j];
        }
        FareySeq[i] = partialSum;
    }
    C = (FareySeq[N] - 1) * 2 - 1;
/*
    for (i = 2; i <= N; ++i)
    {
        for (j = i + 1; j <= N; ++j)
        {
            if (irreducible(i, j))
            {
                //printf("irreductible %d/%d\n", i, j);
                ++C;
            }
        }
    }
    C = C * 2;

    C += N + N - 1;
*/
    //write result
    fp = fopen("fractii.out", "w");
    fprintf(fp, "%d", C);
    fclose(fp);

    return 0;
}