Cod sursa(job #327970)

Utilizator klamathixMihai Calancea klamathix Data 30 iunie 2009 17:26:09
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
#define N 100001

using namespace std;

int i , j , T , M , k;
int  phi[N];

void Sieve () {
     int i ; int j;

/*
     for ( i = 1; i <= N; ++i)
    phi[i] = i-1;
    
for ( i = 2; i <= N; ++i)
    for (j = 2*i; j <= N; j += i)
        phi[j] -= phi[i];

*/

for (int i=1;i<=N;i++) phi[i]=i;

for (int i=2;i<=N;i++)
   if (phi[i]==i)
      for (j=i;j<=N;j+=i) phi[j] /=i, phi[j] *= (i-1);






}
          
/*
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 * phi[M] * M );
          }

return 0;
}