Cod sursa(job #57294)

Utilizator peanutzAndrei Homorodean peanutz Data 1 mai 2007 17:43:13
Problema Sum Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#include <memory.h>

#define NMAX 100001

double p[NMAX];

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

	for(j = 2; j < NMAX; ++j)
		{
			p[j] = j;

			if(!(j % 2))
			{
				//d = j;
				p[j] *= 0.5;
			}
		}


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

			for(j = d = i, d = 1 - (double)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);

	//memset(p, 0, sizeof(p));

	ciur();

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

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

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

	fclose(stdin);
	fclose(stdout);

	return 0;
}