Cod sursa(job #120867)

Utilizator TabaraTabara Mihai Tabara Data 6 ianuarie 2008 22:45:10
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
//70 puncte
#include <stdio.h>

#define in "sum.in"
#define out "sum.out"
#define NMAX 210001

int phi[NMAX];
int N, X;

int main()
{
    int i, j;
    for ( i = 1; i <= NMAX; ++i )
        phi[i] = i-1;
    for ( i = 2; i <= NMAX; ++i )
        for ( j = 2*i; j <= NMAX; j += i )
            phi[j] -= phi[i];
 
    freopen( in, "r", stdin );
    freopen( out, "w", stdout );
    
    scanf( "%d", &N );
    #define dim 800000
    int poz = 0; char buf[dim];
    fread( buf, 1, dim, stdin );
    #define cit(x)                         \
    {                                      \
     x = 0;                                \
     while(buf[poz] < '0')                 \
      {                                    \
       ++poz;                              \
       if(poz == dim)                      \
         fread(buf,1,dim,stdin), poz = 0;  \
      }                                    \
     while(buf[poz] >= '0')                \
      {                                    \
       x = x*10 + buf[poz] - '0';          \
       if(++poz == dim)                    \
        fread(buf,1,dim,stdin), poz = 0;   \
      }                                    \
    }                                                                                                                

    for ( i = 1; i <= N; ++i )
    {
        cit(X)
        long int REZ = ((phi[X]*X)<<1);
        printf( "%ld\n", REZ );
    }
       
    return 0;
}