Pagini recente » Cod sursa (job #1940233) | Cod sursa (job #1759477) | Cod sursa (job #1521104) | Cod sursa (job #477009) | Cod sursa (job #1200717)
#include <stdio.h>
#define MAXN 100000
#define NRPRIME 9592
#define DIV_MAX 6
int v[NRPRIME], dr = 0;
void ciur(int n){
char bun[MAXN + 1];
int i, j;
for(i = 0; i <= n; i++) bun[i] = 1;
for(i = 2; i * i <= n; i++){
if(bun[i]){
for(j = i * i; j <= n; j += i){
bun[j] = 0;
}
}
}
for(i = 2; i <= n; i++){
if(bun[i]){
v[dr] = i;
dr++;
}
}
return ;
}
int afl(int n, int *div, int *nr){
*nr = 0;
int i, rez = 1, lg;
while(n > 0){
i = n & (-n);
n -= i;
lg = 0;
while(i > 1){
lg++;
i >>= 1;
}
rez *= div[lg];
(*nr)++;
}
return rez;
}
int sum(int n){
int i, div[DIV_MAX], d = 0;
for(i = 0; i < dr; i++){
if(n % v[i] == 0){
div[d] = v[i];
d++;
}
}
int apar = 0, prod, nrap, adun;
long long rez = (2 * n) * (2 * n + 1) / 2;
for(i = 1; i < (1 << d); i++){
apar++;
prod = afl(apar, div, &nrap);
adun = (2 * n) * (2 * n / prod + 1) / 2;
if(nrap & 1) adun = -adun;
rez += adun;
}
return rez;
}
int main(){
FILE *in = fopen("sum.in", "r");
FILE *out = fopen("sum.out", "w");
int n;
fscanf(in, "%d", &n);
ciur(MAXN);
int i, x;
for(i = 0; i < n; i++){
fscanf(in, "%d", &x);
fprintf(out, "%d\n", sum(x));
}
fclose(in);
fclose(out);
return 0;
}