Cod sursa(job #57253)

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

#define NMAX 100001

double p[NMAX];

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

	for(j = 2; j < NMAX; j += 2)
		{
			d = j;
			p[j] = d * 0.5;
		}


	//p[2] = 1;
	for(i = 3; i < NMAX; ++i)
	{
		/*if(!(i % 2))
			p[i] = (double)i * 0.5;
		*/
		if(!p[i])
		{

			for(j = d = i, d = 1 - 1/d; j < NMAX; j += i)
				{
					if(!p[j])
						p[j] = j;

					p[j] *= 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;
}