Pagini recente » Cod sursa (job #887396) | Cod sursa (job #1487728) | Cod sursa (job #1268851) | Cod sursa (job #2344033) | Cod sursa (job #1868442)
#include <cstdio>
int desc[200001];
int max(int a, int b) {
if(a > b)
return a;
return b;
}
const int INF = 1000000000;
typedef long long i64;
int pr[5];
i64 sum(int x) {
int prime = 1, last;
last = desc[x];
int xc = x;
pr[0] = desc[x];
while(xc > 1) {
if(desc[xc] != last) {
pr[prime] = desc[xc];
prime++;
last = desc[xc];
}
xc = xc / desc[xc];
}
i64 s = 0LL;
for(int i = 1; i < 1 << prime; ++i) {
int nr = 0, prod = 1;
for(int j = 0; j < prime; ++j)
if((1 << j) & i) {
nr++;
prod = prod * pr[j];
}
if(nr % 2 == 1)
s = s + (i64)(2 * x / prod) * (2 * x / prod + 1) / 2 * prod;
else
s = s - (i64)(2 * x / prod) * (2 * x / prod + 1) / 2 * prod;
}
return (i64)2 * x * (2 * x + 1) / 2 - s;
}
int main() {
int n, x;
for(int d = 2; d * d <= 200000; ++d)
if(desc[d] == 0)
for(int i = d * d; i <= 200000; i = i + d)
desc[i] = d;
for(int d = 2; d <= 200000; ++d)
if(desc[d] == 0)
desc[d] = d;
FILE *fin = fopen("sum.in", "r");
FILE *fout = fopen("sum.out", "w");
fscanf(fin, "%d", &n);
for(int i = 0; i < n; ++i) {
fscanf(fin, "%d", &x);
fprintf(fout, "%lld\n", sum(x));
}
fclose(fin);
fclose(fout);
return 0;
}