Pagini recente » Cod sursa (job #2588534) | Cod sursa (job #2363268) | Cod sursa (job #749347) | Cod sursa (job #1555211) | Cod sursa (job #138354)
Cod sursa(job #138354)
#include <stdio.h>
const int N_MAX = 20;
int v[N_MAX], wx;
int divx[N_MAX];
int main()
{
freopen("sum.in", "r", stdin);
#ifndef _SCREEN_
freopen("sum.out", "w", stdout);
#endif
int N, X, i, sum, mx, kkt, c, nrb, p, k;
for (scanf("%d\n", &N); N; N --) {
scanf("%d\n", &X);
divx[0] = 0;
int wx = X;
if (X % 2 == 0) {
divx[++ divx[0]] = 2;
while (X % 2 == 0) X /= 2;
}
for (i = 3; i * i <= wx; i += 2) {
if (X % i == 0) {
divx[++ divx[0]] = X;
while (X % i == 0) X /= i;
}
}
if (X != 1) divx[++ divx[0]] = X;
sum = 0;
mx = 1 << divx[0];
for (c = 1; c < mx; c ++) {
nrb = 0;
p = 1;
for (i = 0; i < 8; i ++) {
if (c & (1 << i)) {
p *= divx[i + 1];
nrb ++;
}
}
if (nrb % 2 == 1) k = 1;
else k = -1;
kkt = (2 * wx) / p;
kkt *= (kkt + 1), kkt /= 2;
p *= kkt;
sum += k * p;
}
printf("%d\n", wx * (2 * wx + 1) - sum);
}
return 0;
}