Cod sursa(job #597211)
#include <fstream>
using namespace std;
int X, N;
int prims[502];
bool isprim[100002];
int fact[10];
void ciur()
{
prims[++prims[0]] = 2;
for (int i = 3; i <= 100000; i += 2)
if (!isprim[i])
{
prims[++prims[0]] = i;
for (long long j = 1LL * i * i; j <= 100000; j += 2 * i)
isprim[j] = true;
}
}
int main()
{
ifstream fin("sum.in");
ofstream fout("sum.out");
ciur();
fin >> N;
while (N--)
{
long long sumnow = 0;
fin >> X;
fact[0] = 0;
int aux = X;
for (int i = 1; prims[i] * prims[i] <= X; ++i)
if (aux % prims[i] == 0)
{
fact[++fact[0]] = prims[i];
while (aux % prims[i] == 0)
aux /= prims[i];
}
if (aux != 1) fact[++fact[0]] = aux;
for (int i = 1; i < (1 << (fact[0])); ++i)
{
int now = 1;
for (int j = 0; j < fact[0]; ++j)
if (i & (1 << j))
now *= fact[j + 1];
int times = (2 * X) / now;
long long snow = 0;
snow += 1LL * times * (times + 1) / 2;
snow *= 1LL * now;
int bits = 0, aux = i;
while (aux)
aux &= aux - 1, ++bits;
if (bits & 1) sumnow += snow;
else sumnow -= snow;
}
fout << 1LL * 2 * X * (2 * X + 1) / 2 - sumnow << '\n';
}
fin.close();
fout.close();
}