Cod sursa(job #757787)

Utilizator VictorPVictor Padureanu VictorP Data 13 iunie 2012 15:10:29
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include<stdio.h>

int a[1000001];

void ciuruire(int n)
{
	int i,j;
	for(i=2;i<=1000;++i)
	if(a[i] == 0)
	{
		for(j=i*i;j<=n;j += i)
		{
			a[j] = i;
		}
	}
}

int fi(int n)
{
	int f=n,c;
	while(a[n])
	{
		c = a[n];
		while(n%c == 0)
		{
			n /= c;
		}
		f = (f/c)*(c-1);	
	}
	if( n > 1)
	f = (f/n)*(n-1);
	return f;
}

int main()
{
	int n,i;
	long long s;
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);
	scanf("%d",&n);
	ciuruire(n);
	s=1;
	for(i=2;i<=n;i++)
	s+=2*fi(i);
	printf("%lld",s);
	return 0;
}