Cod sursa(job #51600)

Utilizator pustiuRadu Zaharia pustiu Data 15 aprilie 2007 14:52:20
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 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()
{
    int p[Nmax];
    prim[0]=0;
    for(int i=2;i<=N;i++)
    {
        if(!p[i])
        {
            for(int j=2;j*i<=N;j++)
                p[j*i]=1;
        }
    }
    for(int j=1;j<=N;j++)
        if(!p[j])
        {
            prim[0]++;
            prim[prim[0]]=j;
        }
}

void calcul ()
{
    preproc();
    for(int i=2;i<=N;i++)
    {
        int k=N;
        {
            double p=i;
            for(int j=2;j<=prim[0] && j<=i;j++)
                if(i%prim[j]==0)
                    p*=(1-(double)1/prim[j]);
            k=p;
        }
        S+=k;
    }
    S=S*2+1;
}

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

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