Cod sursa(job #66537)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 19 iunie 2007 17:53:52
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>
#include<math.h>
	       /*
typedef struct
{
  long x, e;
}  factor;

factor v[10];*/

long n, contor, nr, v[1000002], u[1000002];


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

for(i=2;i<=1000000;i++)
if(u[i]==0)
{
j=2;
v[i]--;
while(i*j<=n)
{

u[i*j]=1;
v[i*j]=v[i*j]-v[i*j]/i;
j++;}
}
}                /*
void descomp(long x)
{
  int exp, d;
  d=2;
  nr=0;
  while (x!=1)
   {
     exp=0;
     if (x%d==0)
       {
	 nr++;
	 while (x%d==0)
	  {
	    exp++;
	    x/=d;
	  }
	 v[nr].e=exp;
	 v[nr].x=d;
       }
     d++;
   }
}

long totient(long x)
{
  long i, c=1;
  for (i=1; i<=nr; i++)
    c*=((v[i].x-1)*pow(v[i].x,v[i].e-1));
  return c;
}

void ciur(long x)
{
  long i;
  a[1]=a[2]=1;
  for (i=4; i<=x; i+=2)
    {
      descomp(i);
      a[i]=totient(i);
    }
  for (i=3; i<=x; i+=2)
  {
    if (a[i]==0)
      {
	a[i]=i-1;
	long j=i*2;
	if (a[j]==0)
	while (j<n)
	  {
	    descomp(j);
	    a[j]=totient(j);
	    j+=i;
	  }
      }
  }
}

		   */

void citire()
{
  freopen("fractii.in","r",stdin);
  scanf("%ld",&n);
}

int main()
{
  citire();
  long i;
  contor=1;
  eratostene();
  for (i=2; i<=n; i++)
    contor+=v[i];
  freopen("fractii.out","w",stdout);
  printf("%ld",contor*2-1);
  return 0;
}