Cod sursa(job #149926)

Utilizator za_wolfpalianos cristian za_wolf Data 6 martie 2008 12:19:01
Problema Fractii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include<stdio.h>
#define NMAX 1001000
long long s,x[NMAX],i,j,k,l,n,m;
int main()
{
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);
	scanf("%lld",&n);
	x[1]=1;
	for (i=2;i<=n;i++)
		if (x[i]==0)
			for (j=i+i;j<=n;j+=i)
				x[j]=1;
	x[0]=0;
	for (i=2;i<=n;i++)
		if (x[i]==0)
			x[++x[0]]=i;
	x[x[0]+1]=n+1;
	s=1;
	for (i=2;i<=n;i++)
	{
		k=i;
		l=i;
		for (j=1;x[j]*x[j]<=i;j++)
			if (l%x[j]==0)
			{
				k=k/x[j]*(x[j]-1);
				while(l%x[j]==0)
					l=l/x[j];
			}
		if (l!=1||l==i)
			k=k/l*(l-1);
		if (k==i) k--;
		s+=k+k;
	}
	printf("%lld\n",s);
	return 0;
}