Cod sursa(job #890577)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 25 februarie 2013 10:34:56
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;



int main()
{
	//Deschiderea fisierelor de intrare si iesire
	ifstream fin("fractii.in");
	ofstream fout("fractii.out");
	
	//Vectorul ce contine valorile Functiei Totient a lui Euler
	unsigned int phi[1000005];

	//n-ul din enunt si i,j - contoare 
	unsigned int n,i,j;
	
	//Suma phi-urilor de la 2 pana la n
	long long int sum=0;
	
	//Se citeste n
	fin>>n;
	
	//Se initializeaza toate phi-urile cu indicele lor 
	for(i=2;i<=n;i++)
		phi[i]=i;
	
	//Se calculeaza suma phi-urilor de la 2 la n
	for(i=2;i<=n;i++)
	{
		//Pentru fiecare numar prim
		if(phi[i]==i)
		{
			//Ne ocupam de multiplii lui (deoarece acestia il contin pe i in descompunere)
			for(j=i;j<=n;j+=i)
			{
				phi[j]/=i;
				phi[j]*=(i-1);
			}
		}			
		
		//Actualizam suma
		sum+=phi[i];
	}
	
	//Afisam numarul de fractii ce pot fi obtinute 
	fout<<2*sum+1<<'\n';
	
	//Inchiderea fisierelor de intrare si iesire
	fin.close();
	fout.close();
	return 0;
}