Cod sursa(job #51583)

Utilizator pustiuRadu Zaharia pustiu Data 15 aprilie 2007 11:15:42
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.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();
    S+=N;
    for(int i=2;i<=N;i++)
    {
        int k=N;
        int p=1;
        if(!prim[i])
            k-=N/i;
        else
        for(int j=2;j<=i;j++)
            if(i%j==0 && !prim[j])
            {
                k-=N/j;
                p*=j;
                if(prim[p])
                    k+=N/p;
            }
        S+=k;
    }
}

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

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