Cod sursa(job #307135)

Utilizator aladinaladin aladinn aladin Data 23 aprilie 2009 10:44:58
Problema Fractii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <stdio.h>
#include <math.h>
int main()
{long long s=0;
 int v[10000],fi[1000],i,j,n,nr,q;
 
  
 freopen("fractii.in","r",stdin);
 freopen("fractii.out","w",stdout);
 scanf("%d",&n);
 
 for (i=2;i<=n/2;i++)
	 if (!v[i])
		 for (j=2;j<=n/i;j++) v[i*j]=i;
	 
 for (i=2;i<=(int)sqrt(n);i++)
     if	 (!v[i])
	 {nr=i;
	  for (;nr<=n;) {fi[nr]=nr-(nr / i);nr*=i;}
	 } 
 
 for (i=2;i<=n;i++)
	 if (fi[i]==0) 
		 if (v[i]==0) fi[i]=i-1; else
	 {nr=i;
	 for (;nr%v[i]==0;) 
		 nr=nr/v[i];
	 fi[i]=fi[nr]*fi[i / nr];
	 }
	 
  for (i=1;i<=n;i++) s+=fi[i];
 printf("%lld",2*s+1);
  return 0;}