Cod sursa(job #327957)

Utilizator klamathixMihai Calancea klamathix Data 30 iunie 2009 16:58:28
Problema Sum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<cstdio>
#define MAXN 100001

using namespace std;

int i , j , T , M , primes[MAXN / 3] , k;
bool A[MAXN];

void Sieve () {
     
     int i , j;
     
     for ( A[1] = 1 , i = 2 ; i <= MAXN / 2 ; ++i )
         A[2 * i] = 1;
     
     for( i = 3 ; i * i <= MAXN ; ++i ) 
          {
              if( A[i] == 0 ) {
                  for( j = i ; j * i <= MAXN ; ++j)
                       A[j * i] = 1;
                  }
              }
     
     for( i = 1 ; i <= MAXN ; ++i )
          if ( A[i] == 0 ) primes[++k] = i ;

}
          

int Totient ( int X ) {
    int result , i;
    float p = X;
                  
    for( i = 1 ; primes[i] <= X ; ++i)    
         if( X % primes[i] == 0 ) p *=  ( 1 - ( float )1 / primes[i] );
    
    result = int ( p ) ;
    
    return result;
}

int main ()
{
    freopen("sum.in","r",stdin);
    freopen("sum.out","w",stdout);
    
    scanf("%d",&T);
    
    Sieve();
    
    
    for( i = 1 ; i <= T ; ++i ){ 
               scanf("%d" ,&M);
              printf("%d\n" , 2 * Totient ( M ) * M );
          }

return 0;
}