Pagini recente » Cod sursa (job #815548) | Cod sursa (job #202800)
Cod sursa(job #202800)
#include <stdio.h>
#include <math.h>
#define LNUM 200002
long i, n, a[LNUM / 2], v[LNUM], aux, o, j;
long last[LNUM], bn[16],c;
inline void ciur_patratic() {
long bla = LNUM/2;
for (long i = 2; i <= bla; ++i) {
if (v[i] == 0) {
for (long j = i ; j <= bla; j += i) {
last[j] = i;
v[j] = 1;
}
}
}
}
inline void binar() {
aux = j;
c = 0;
while (aux) {
bn[++c] = aux -( (aux>>1)<<1);
aux >>= 1 ;
}
}
int main() {
freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
scanf("%ld", &n);
for (i = 1; i <= n; ++i) {
scanf("%ld", &a[i]);
}
ciur_patratic();
for (i = 1; i <= n; ++i) {
aux = a[i];
o = 0;
while (aux != 1) {
if (v[o] != last[aux]) {
v[++o] = last[aux];
}
aux /= last[aux];
}
a[i]*=2;
long dpn = 1;
for (j = 1; j <= o; ++j) {
dpn *= 2;
}
long long sum = 0;
for (j = 0; j < dpn; ++j) {
binar();
long prod = 1,div = 1;
for (long k = 1; k <= c; ++k)
if (bn[k] == 1) {
div=!div;
prod*=v[k];
}
long long vaal = a[i]/prod;
sum += prod * ((vaal*(vaal+1))>>1)* ( div*2-1);
}
printf("%lld\n",sum);
}
return 0;
}