Nu aveti permisiuni pentru a descarca fisierul grader_test32.in
Cod sursa(job #460047)
Utilizator | Data | 1 iunie 2010 01:41:11 | |
---|---|---|---|
Problema | Sum | Scor | 75 |
Compilator | c | Status | done |
Runda | Arhiva de probleme | Marime | 0.67 kb |
#include <stdio.h>
#define ll long long
int nr, a[100100][32], dim[100100];
ll lim, ret[100100];
ll back(int lvl, ll prod) {
if (lvl == dim[nr])
return lim*(lim/prod+1)/2;
return back(lvl+1,prod) - back(lvl+1,prod*a[nr][lvl]);
}
int main() {
freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
int t,i,j;
scanf("%d", &t);
for (i = 2; i < 100100; ++i) {
if (dim[i] == 0) {
for (j = i; j < 100100; j += i)
a[j][dim[j]++] = i;
}
lim = i << 1;
nr = i;
ret[i] = back(0,1);
}
while (t--) {
scanf("%d", &nr);
printf("%lld\n", ret[nr]);
}
return 0;
}