Cod sursa(job #8634)

Utilizator tancuStancu George tancu Data 25 ianuarie 2007 11:19:30
Problema Fractii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<stdio.h>
#include<math.h>
FILE *f1,*f2;
int main()
{
int ok;
long double s;
long unsigned fi,n,i,j;
int v[500],nrp=0,p;
double h;
f1=fopen("fractii.in","r");
f2=fopen("fractii.out","w");
fscanf(f1,"%lu\n",&n);
if(n==1)
	s=1;
else
	{
	s=3;
	v[0]=2;
	for (i=3;i<=n;i++)
		{
		j=i;
		fi=i;
		p=0;
		while(j>1)
			{
			ok=0;
			while(!(j%v[p]))
				{
				ok=1;
				j=j/v[p];
				}
			if(ok)
				fi=fi/v[p]*(v[p]-1);else{
			h=sqrt((double)j);
			if((v[p]>h)&&(j>1))
				{
				fi=fi/j*(j-1);
				if((j<1000)&&(j>v[nrp]))
					v[++nrp]=j;
				j=1;
				} }
			if(p<nrp)
				p++;
			}
		s=s+2*fi;
		}
	}
fprintf(f2,"%.0Lf\n",s);
fclose(f1);
fclose(f2);
return 0;
}