Cod sursa(job #569221)

Utilizator HotSteelBeteag Ion Andrei HotSteel Data 1 aprilie 2011 10:04:15
Problema Fractii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
#include<math.h>

long n;
long v[1000000];

long isprime(long x)
{
	if(x==0 || x==1 || (x%2==0&&x!=2))
		return 0;
	
	long lim;
	lim=sqrt(x);
	long d;
	for(d=3;d<=lim;++d)
		if(x%d==0) return 0;
	return 1;
}

long retfpf(long x)
{
	long lim;
	long i;
	for(i=2;i<=n;i++)
		if(isprime(i) && x%i==0) return i;
	return 0;
}

int main()
{
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);
	long i,j;
	long fpf;

	scanf("%ld",&n);
	
	for(i=1;i<=n;++i)
		v[i]=i;
	
	for(i=2;i<=n;++i)
	{
		if(!isprime(i))
			continue;
		fpf=retfpf(i);
		for(j=i;j<=n;j+=i)
			v[j]=(v[j]/fpf)*(fpf-1);
	}
	
	long long s;
	s=0;
	
	for(i=2;i<=n;++i)
		s+=v[i];
	s*=2;
	s+=1;
	
	printf("%lld",s);
	
	return 0;
}