Cod sursa(job #138372)

Utilizator raula_sanChis Raoul raula_san Data 18 februarie 2008 14:25:36
Problema Sum Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 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);
		
		long ret = n * 2 * (int) Phi[n];
		
		printf("%ld\n", ret);
	}

	fclose(stdin);
	fclose(stdout);
}