Cod sursa(job #111567)

Utilizator tvladTataranu Vlad tvlad Data 30 noiembrie 2007 17:52:23
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>

int main() {
	freopen("sum.in","rt",stdin);
	freopen("sum.out","wt",stdout);
	int n;
	scanf("%d",&n);
	for (int k = 0; k<n; ++k) {
		int x, nd = 0;
		int d[8];
		scanf("%d",&x);
		int vx = x;
		if (vx % 2 == 0) {
			d[nd++] = 2;
			for (; vx % 2 == 0; vx /= 2);
		}
		for (int i = 3; i <= vx; i += 2) {
			if (vx % i == 0) {
				d[nd++] = i;
				for (; vx % i == 0; vx /= i);
			}
		}

		int s = x*(2*x+1), lm = 1 << nd;
		for (int i = 1; i<lm; ++i) {
			int p = 1, np = 0;
			for (int j = 0; j < nd; ++j)
				if (i & (1<<j)) {
					p *= d[j];
					++np;
				}
			 int r = (2*x)/p;
			 r = r*(r+1)/2;
			 r *= p;
			 if (np % 2 != 0) s -= r; else s += r;
		}
		printf("%d\n",s);
	}
}