Cod sursa(job #349048)

Utilizator proflaurianPanaete Adrian proflaurian Data 17 septembrie 2009 20:28:07
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.51 kb
#include<stdio.h>
int n,i,j,p,E[1000001];
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);
	scanf("%d",&n);
}
void solve()
{
	unsigned long long sol=1;
	for(i=2;i<=n;i++)
	{
		if(!E[i])
		{
			E[i]=i-1;
			for(j=i*i;j<=n;j+=i)E[j]=i;
		}
		else
		{
			p=E[i];j=i;
			E[i]=p-1;j/=p;
			while(j%p==0){E[i]*=p;j/=p;}
			if(j>1)E[i]*=E[j];
		}
		sol+=2*E[i];
	}
	printf("%llu\n",sol);
}