Cod sursa(job #57247)

Utilizator peanutzAndrei Homorodean peanutz Data 1 mai 2007 16:03:50
Problema Sum Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>

#define NMAX 100010

double p[NMAX];

void ciur()
{
	long i, j;
	double d;

	for(j = 2; j < NMAX; j += 2)
		{
			d = j;
			p[j] = d * (1 - (double)1/2);
		}

	for(i = 3; i < NMAX; i += 2)
	{
		if(!p[i])
		{
			d = i;
			for(j = i; j < NMAX; j += i)
				{
					if(!p[j])
						p[j] = j;

					p[j] *= (1 - 1/d);
				}
		}
		//printf("%ld are %d div primi\n", i, p[i]);
	}
}

int main()
{
	long n, x;

	freopen("sum.in", "r", stdin);
	freopen("sum.out", "w", stdout);

        ciur();

	scanf("%ld\n", &n);

	while(n--)
	{
		scanf("%ld\n", &x);

		printf("%.0lf\n", 2*p[x]*x);
	}

	fclose(stdin);
	fclose(stdout);

	return 0;
}