Cod sursa(job #1074404)

Utilizator octav1234Pocola Tudor Octavian octav1234 Data 7 ianuarie 2014 17:23:45
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <iostream>
using namespace std;
int E[1000001],D[1000001],PHI[1000001],a,b,x;
long long rez;
int n,i,j;
int main()
{
	cin>>n;
	for(i=2;i<=n;i++)
		E[i]=1;
	for(i=2;i<=n;i++)
		if(E[i]==1)
		{
			PHI[i]=i-1;
			D[i]=i;
			for(j=i+i;j<=n;j+=i)
			{
				E[j]=0;
				D[j]=i;
			}
		}
	for(i=2;i<=n;i++)
		if(E[i]==0)
		{
			x=i;
			a=1;
			while (x%D[i]==0)
			{
				a=a*D[i];
				x=x/D[i];
			}
			b=i/a;
			if (b!=1)
				PHI[i]=PHI[a]*PHI[b];
			else
				PHI[i]=a/D[i]*(D[i]-1);
		}
	PHI[1]=1;
	for(i=1;i<=n;i++)
		rez+=PHI[i];
	cout<<rez*2-1<<'\n';
	return 0;
}