Cod sursa(job #494183)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 20 octombrie 2010 22:02:24
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>

#define NMAX 1010

using namespace std;

bool A[NMAX+2];
int P[NMAX];
int k;
int N;
int T[NMAX*NMAX+2];


void ciur()
{
	for(int i=4;i<=NMAX;i+=2)
	{
		A[i]=true;
	}
	P[++k]=2;
	for(int i=3;i<=NMAX;i+=2)
	{
		if(!A[i])
		{
			P[++k]=i;
			for(int j=i*i;j<=NMAX;j+=2*i)
				A[j]=true;
		}
	}
}

void citire()
{
	fstream fin("fractii.in",ios::in);
	
	fin>>N;
	
	fin.close();
}


void totient()
{
	int z;
	int p;
	for(int i=2;i<=N;i++)
	{
		z=i;
		T[i]=1;
		for(int j=1;P[j]*P[j]<=N ;j++)
		{
			p=0;
			while(z%P[j]==0)
			{
				z=z/P[j];
				p++;
			}
			if(p>=1)
			{
				T[i]=T[i]*(P[j]-1)*int(pow(double(P[j]),double(p-1)));
			}
		}
		if (z!=1)
		{
			T[i]*=z-1;
		}
	}
}




void afisare()
{
	fstream fout("fractii.out",ios::out);
	long long S=0;
	
	for(int i=2;i<=N;i++)
		S+=T[i];
	S*=2;
	S+=1;
	
	fout<<S<<"\n";
	
	fout.close();
}

int main(int argc,char*argv[])
{
	citire();
	ciur();
	totient();
	afisare();
}