Cod sursa(job #69561)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 3 iulie 2007 15:57:34
Problema Sum Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
#include<fstream.h>
#include<math.h>

long v[200001], u[200001];

long n, contor, nr, x;


void eratostene()
{
  long long i,j;
  for(i=2;i<=200000;i++) v[i]=i;

  for(i=2;i<=200000;i++)
   {
    if(i>200000) break;
    if(u[i]==0)
     {
      j=2;
      v[i]--;
      while(i*j<=200000)
	{
	  u[i*j]=1;
	  v[i*j]=v[i*j]-v[i*j]/i;
	  j++;
	}

       }
    }
}
int prim(long long x)
{
  if (x==2) return 1;
  if (x==1) return 0;
  if (x%2==0) return 0;
  for (long long unsigned d=3; d*d<=x; d+=2)
    if (x%d==0) return 0;
  return 1;
}



void prelucrare2()
{
   long long unsigned i, j;
   long long unsigned s1;
   ifstream in("sum.in");
   ofstream out("sum.out");
   in>>n;
   eratostene();
   for (i=1; i<=n; i++)
     {
       in>>x;
	if (prim(x)==0)	s1=(v[x]*x);
	  else s1=(x-1)*x;

      s1*=2;
      out<<s1<<'\n';
     }
}




int main()
{
  prelucrare2();
  return 0;
}