Pagini recente » Cod sursa (job #2344204) | Cod sursa (job #11434) | Cod sursa (job #2390199) | Cod sursa (job #2949794) | Cod sursa (job #1246699)
#include <vector>
#include <algorithm>
#include <cstdio>
::std::size_t const maxn = 100000;
::std::size_t X[maxn];
// Array f is It is zero initialized.
::std::size_t f[maxn + 1];
bool
solveSum
()
{ freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
::std::size_t n;
scanf("%zd", &n);
// Queries.
::std::size_t i;
::std::size_t x;
::std::size_t m = 2;
for(i=0; n>i; ++i)
{ scanf("%zd", &x);
m = ::std::max(m, x);
X[i] = x;
}
// Erastotene's Sieve.
::std::size_t s;
for(i=2; m >= i; ++i)
{ if(0 == f[i] )
{ for(s = i; m >= s; s += i)
{ f[s] = i;
}
}
}
// Euler's Totient Function.
::std::size_t p;
::std::size_t a;
::std::size_t b;
for(i=2; m >= i; ++i)
{ p = f[i];
a = 1;
b = i;
while(0 == (b % p) )
{ a *= p;
b /= p;
}
if( (1 == a) || (1 == b) )
{ f[i] = i - (i/p);
}
else
{ f[i] = f[a] * f[b];
}
}
// Answers.
::std::size_t z;
unsigned long long w;
for(i=0; n>i; ++i)
{ x = X[i];
z = f[x];
w = x;
w *= z;
w *= 2;
printf("%llu\n", w);
}
fcloseall();
return true; // Success.
}
int
main
()
{ int status;
try
{ bool const ok = solveSum();
status = ( ok ? 0 : 1 );
}
catch ( ... )
{ status = 2;
}
return status;
}