Cod sursa(job #138360)

Utilizator raula_sanChis Raoul raula_san Data 18 februarie 2008 14:08:40
Problema Sum Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <cstdio>

#define dim 100001

int N;

double Phi[dim];

void Erathostene()
{
	int i, j;

	double d;

	Phi[2] = 2;
	
	for(i=3; i<dim; i+=2)
	{
		if(!Phi[i-1]) Phi[i-1] = i - 1;
		if(!Phi[i]) Phi[i] = i;
		
		Phi[i-1] *= 0.5;
		
		if(Phi[i] == i)
		{
			d = i;
			d = 1 - (double) (1 / d);
			
			for(j=i; j<dim; j+=i)
			{
				if(!Phi[j]) Phi[j] = j;
				
				Phi[j] *= d;
			}
		}
	}
}

int main()
{
	freopen("sum.in", "rt", stdin);
	freopen("sum.out", "wt", stdout);

	Erathostene();
	
	int n;
	for(scanf("%d", &N); N; --N)
	{
		scanf("%d", &n);
		
		printf("%.0lf\n", 2 * Phi[n] * n);
	}
	
	fclose(stdin);
	fclose(stdout);
}