Cod sursa(job #68390)

Utilizator coderninuHasna Robert coderninu Data 27 iunie 2007 19:05:04
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#define infile "fractii.in"
#define outfile "fractii.out"
#define nmax 1000000

long n, pr[nmax], u, aux[nmax], rez;
int ciur[nmax], i, j;

void readdata()
{
 FILE *fin=fopen(infile, "r");
 fscanf(fin, "%ld", &n);
 fclose(fin);
}

void ciur_eratestone()
{
 for (i=2; i<=n; i++)
     if (!ciur[i])
	 {
	  pr[++pr[0]]=i;
	  for (j=2; j*i<=n; j++)
	      ciur[i*j]=1;
	 }
}

long numar(long x)
{
 aux[0]=0;
 long temp=0, temp2=0;
 for (i=1; i<=pr[0] && x!=1; i++)
      if (!(x%pr[i]))
	  {
	   aux[++aux[0]]=pr[i];
	   while (!(x%pr[i])) x/=pr[i];
	  }
 for (i=1; i<=aux[0]; i++)
     {
      temp=n/aux[i];
      for (j=i-1; j>0; j--)
	  temp-=n/(aux[j]*aux[i]);
      temp2+=temp;
     }
 return n-temp2;
}

void solve()
{
 long k;
 ciur_eratestone();
 rez=n;
 for (k=2; k<=n; k++)
     rez+=numar(k);
}

void writedata()
{
 FILE *fout=fopen(outfile, "w");
 fprintf(fout, "%ld", rez);
 fclose(fout);
}

int main()
{
 readdata();
 solve();
 writedata();
 return 0;
}