Cod sursa(job #51584)

Utilizator pustiuRadu Zaharia pustiu Data 15 aprilie 2007 11:56:07
Problema Fractii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
#include<math.h>
#define Nmax 1000000

int N;
long long S=0;
int prim[Nmax];

void citire ()
{
    FILE *in = fopen ("fractii.in", "rt");
    fscanf (in, "%d", &N);
    fclose(in);
}

void preproc()
{
    for(int i=2;i<=N;i++)
    {
        if(!prim[i])
        {
            for(int j=2;j*i<=N;j++)
                prim[j*i]=1;
        }
    }
}

int cmmdc(int x, int y)
{
    while(x!=y)
    {
        if(x>y)
            x-=y;
        else
            y-=x;
    }
    return x;
}


void calcul ()
{
    preproc();
    S+=N-1;
    for(int i=2;i<=N;i++)
    {
        int k=N-i;
        int p=1;
        if(!prim[i])
            k-=(N-i)/i;
        else
        for(int j=i+1;j<=N;j++)
        {
            if(cmmdc(i,j)!=1)
                k--;
        }
        S+=k;
    }
    S=S*2;
    S++;
}

void afisare ()
{
    FILE *out = fopen ("fractii.out", "wt");
    fprintf(out, "%lld", S);
    fclose(out);
}

int main ()
{
    citire();
    calcul();
    afisare ();
    return 0;
}