Cod sursa(job #192101)

Utilizator FedoraSulphurGrosan Flavia FedoraSulphur Data 30 mai 2008 18:37:57
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<stdio.h>
long v[1000010],tot[1000010],n;

/*long ftot(long x)
{  long nr_tot=x; 
   for(long i=1;i<=x;i++)
      if(v[i]==0 && x%i==0)
         nr_tot=nr_tot*(i-1)/i;
   return nr_tot;
}*/

int main()
{
    FILE*f=fopen("fractii.in","r");
    FILE*g=fopen("fractii.out","w");
    long n,i,j;
    long long nr;
    fscanf(f,"%ld",&n);
	for(i=1;i<=n;i++)
		v[i]=0;
/*	v[1]=1;
	long k=1;
	do
	{
		long m = k+1;
		for(i=1;i<=n;i++)
			if(v[i]==0 && i%m==0 && i/m!=1)
				v[i]=1;
		k=m;
	}
	while(k <= n/2);*/
	
    tot[1]=1;
	for(i=2;i<=n;i++)
 {
              for(j=2;j<=n/i;j++)
                 v[i*j]=1;	  
      if(v[i]==0)
	       tot[i]=i-1;
      else 
      {   int ok=1;  
          for (j=2;j<i&&ok;j++)  
          if (v[j]==0&&(i%j==0))  
             {  
              long aux=i;  
              while (aux%j==0&&aux>0)  
              aux=aux/j;  
              if (aux==1)  
               tot[i]=(j-1)*(i/j);  
              tot[i]=tot[i/aux]*tot[aux];  
              ok=0;  
              }  
      }  
}      
  	nr=0;
	for(i=2;i<=n;i++)
	   nr=nr+tot[i];
    nr=nr*2+1;
    fprintf(g,"%ld",nr);
    fclose(f);
    fclose(g);
    return 0;
}