Cod sursa(job #51599)

Utilizator pustiuRadu Zaharia pustiu Data 15 aprilie 2007 14:38:22
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 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;
        }
    }
}

void calcul ()
{
    preproc();
    for(int i=2;i<=N;i++)
    {
        int k=N;
        {
            double p=i;
            for(int j=2;j<=i;j++)
                if(i%j==0 && !prim[j])
                    p*=(1-(double)1/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;
}