Cod sursa(job #246978)

Utilizator melleColceag Alina melle Data 21 ianuarie 2009 22:34:31
Problema Sum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
#include<math.h>
#define DMAX 30501
char p[DMAX];
long long e,n;

void ciur (long n)
{
  long i,j,lim;
  lim=sqrt(n)+1;
  for (i=1;2*i+1<=lim;++i)
				 if (p[i]==0)
						 for (j=2*i*i+2*i;2*j+1<=n;j=j+2*i+1)
										 p[j]=1;
	}



 int main()
 {

	freopen("sum.in","r",stdin);
	freopen("sum.out","w",stdout);
	long nr,lim,i,x,j,cn,phi;
	long long s=0;
	scanf("%ld",&x);
        ciur(n);
	for (j=1;j<=x;++j)
	{ scanf("%ld",&n);
	  
	  phi=n;
	  cn=n;
	  e=0;
	  s=0;
	lim=sqrt(n)+1;

	while (n%2==0)
	  {
		++e;
		n=n/2;
	  }
	if (e)  phi=phi/2;

	i=1;
	while (2*i+1<=lim&&n>1)
	{
	  e=0;
	  if (p[i]==0)
	  while (n%(2*i+1)==0)
			  {++e;
				n=n/(2*i+1);
			  }
		 if (e)
		  phi=phi/(2*i+1)*(2*i);

		++i;
		if (n>1)  phi=(phi/n)*(n-1);
	 }

	 s=2*cn*phi;
	 printf("%lld\n",s);}
	return 0;
 }