Cod sursa(job #198136)

Utilizator alex.cepoiAlexandru Cepoi alex.cepoi Data 8 iulie 2008 19:56:08
Problema Fractii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>

long a[1000000];
long div[1000000];

void generate(int n)
{
	int i, j;
	for (i=2; i<=n/2; ++i) 
		if (div[i-1]==0)
		{
			for (j=2*i; j<=n; j+= i)
				if (div[j-1]==0)
					div[j-1]=i;
		}
}

int main()
{
	long n, i, j ;
	freopen ("fractii.in", "r", stdin);
	scanf ("%ld", &n);
	fclose(stdin);
	

	a[0]=1;
	generate (n);
	
	long long s=1;
	for (i=2; i<=n; ++i)
	{
		long d= div[i-1];
		if (d)
		{
			long x=1;
			j=i;
			while (j%d==0)
			{
				x*=d;
				j/=d;
			}
			a[i-1]=(x-x/d)*a[j-1];
		}
		else a[i-1]=i-1;
		s+=2*a[i-1];
	}
	
	freopen ("fractii.out", "w", stdout);
	printf ("%lld", s);
	fclose(stdout);
	return 0;
}