Cod sursa(job #59104)

Utilizator risenshineAkil Nasser risenshine Data 8 mai 2007 07:37:10
Problema Sum Scor 70
Compilator c Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>
#define NMAX 100001

int N, X;
int a[NMAX], phi[NMAX];
int p[78500], n;

void sieve() {
	int i, j;
	for (i = 2; i < NMAX; ++i)
		if (!a[i]) {
			p[n++] = i;
			for (j = 2*i; j < NMAX; j += i)
				a[j] = 1;
		}
}
void comp() {
	int i, j;
	for (i = 2; i < NMAX; ++i) {
		if (!a[i])
			phi[i] = i-1;
		else {
			for (j = 0; i % p[j]; ++j)
				;
			if (i/p[j] % p[j])
				phi[i] = phi[p[j]] * phi[i/p[j]];
			else
				phi[i] = p[j] * phi[i/p[j]];
		}
	}
}

int main() {
	FILE *fi = freopen("sum.in", "r", stdin);
	FILE *fo = freopen("sum.out", "w", stdout);
	int i;
	scanf("%d", &N);
	sieve();
	comp();
	for (i = 0; i < N; ++i) {
		scanf("%d", &X);
		printf("%d\n", 2*X*phi[X]);
	}
	//printf("%d", phi[100000]);
	return 0;
}