Pagini recente » Cod sursa (job #307791) | Cod sursa (job #667506) | Cod sursa (job #1349931) | Cod sursa (job #1120748) | Cod sursa (job #245613)
Cod sursa(job #245613)
#include <stdio.h>
#include <math.h>
#define NMAX 100001
#define DMAX (NMAX >> 4) + 1
#define XMAX 70
unsigned char p[DMAX];
int T, N, x[XMAX], num;
long long R, sum, phi ;
void ciur()
{
int i, j, lim;
lim = sqrt(NMAX) + 1;
for (i = 1; (i << 1) + 1 <= lim; ++i)
if ( ! ( p[i >> 3] & ( 1 << (i & 7) ) ) )
for ( j = ( ( i * i) << 1) + ( i << 1) ; (j << 1) + 1 <= lim; j = j + ( i << 1) + 1 )
p[ j >> 3] = p[j >> 3] | (1 << (j & 7) );
num = 1;
x[num] = 2;
for ( i = 1; (i << 1) + 1 <= lim; i++)
if ( !( p[i >> 3] & ( 1 << (i & 7) ) ) )
{
num++;
x[num] = ( i << 1) + 1;
}
}
int main()
{
int t, i, lim, CN;
freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
ciur();
scanf("%d", &T);
for (t = 1; t <= T; t++)
{
scanf("%d", &N);
phi = N;
lim = sqrt(N);
CN = N;
for ( i = 1; x[i] <= lim && CN > 1; i++)
if ( CN % x[i] == 0)
{
phi = phi / x[i];
phi = phi * ( x[i] - 1);
while ( CN > 1 && CN % x[i] == 0)
CN /= x[i];
}
if ( CN > 1)
{
phi = phi / CN;
phi = phi * (CN - 1);
}
if ( N % 2 == 0)
sum = (N / 2 ) * phi;
else
sum = N * ( phi / 2);
R = 2 * sum + N * phi;
printf("%lld\n", R);
}
return 0;
}