Cod sursa(job #123473)

Utilizator AndreyPAndrei Poenaru AndreyP Data 16 ianuarie 2008 07:09:21
Problema Fractii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb

#include<stdio.h>
#include<math.h>
int main()
{
	long n,i,j,p,x;
	unsigned long e,f=0;
	int v;
	freopen("fractii.in", "r", stdin);
	freopen("fractii.out", "w", stdout);
	scanf("%ld", &n);
	for(i=2; i<=n; i++)
	{
		x=i;
		p=0;
		v=0;
		while(x%2==0)
		{
			p++;
			x=x/2;
			v=1;
		}
		if(p>0)
			e=(int)pow(2,p-1);
		else
			e=1;
		p=0;
		while(x%3==0)
		{
			v=1;
			p++;
			x=x/3;
		}
		if(p==0)
			;
		else
			e=e*2*pow(3,p-1);
		for(j=3; x!=1; j+=2)
		{
			if(x%j==0)
			{
				v=1;
				p=0;
				while(x%j==0)
				{
					p++;
					x=x/j;
				}
				e=e*(j-1)*pow(j,p-1);
			}
			if((v==0)&&(j>sqrt(i)))
			{
				x=1;
				e=i-1;
			}
		}
		/*if(v==0)
			e=i-1;
		else
		{
			for(k=j+2; x!=1; k+=2)
			{
				if(x%k==0)
				{
					p=0;
					while(x%k==0)
					{
						p++;
						x=x/k;
					}
					e=e*(k-1)*pow(k,p-1);
				}
			}
		}*/
		f=f+(long unsigned int)2*e;
	}
	f=f+1;
	printf("%lu\n", f);
	return 0;
}