Pagini recente » Cod sursa (job #1616542) | Cod sursa (job #785539) | Cod sursa (job #756969) | Cod sursa (job #2850319) | Cod sursa (job #460052)
Cod sursa(job #460052)
#include <stdio.h>
#include <stdlib.h>
#define ll long long
int nr, a[100100][32], dim[100100];
ll lim, ret[100100];
char output_buffer[1<<20];
char input_buffer[1<<20];
ll back(int lvl, ll prod) {
if (lvl == dim[nr])
return lim*(lim/prod+1);
return back(lvl+1,prod) - back(lvl+1,prod*a[nr][lvl]);
}
int main() {
freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
setbuf(stdin , input_buffer);
setbuf(stdout, output_buffer);
int t,i,j;
for (j = 2; j < 100100; j += 2)
a[j][dim[j]++] = 2;
for (i = 3; i < 100100; i+=2)
if (dim[i] == 0)
for (j = i; j < 100100; j += i)
a[j][dim[j]++] = i;
scanf("%d\n", &t);
while (t--) {
char buff[32];
fgets(buff, 32, stdin);
nr = atoi(buff);
if (ret[nr] == 0) {
lim = nr << 1;
ret[nr] = back(0,1)/2;
}
printf("%lld\n", ret[nr]);
}
return 0;
}