Cod sursa(job #890933)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 25 februarie 2013 12:48:37
Problema Sum Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>

using namespace std;

int main()
{
	//Deschiderea fisierelor de intrare si iesire
	ifstream fin("sum.in");
	ofstream fout("sum.out");
	
	//Vectorul ce va contine valorile Functiei Totient a lui Euler
	long long int phi[100005];
	
	//n-ul si x-ul din enunt, i,j - contoare
	long long int n,x
	int i,j;
	
	//Initial, toate numerele sunt prime
	for(i=2;i<=100000;i++)
		phi[i]=i;
	
	//Se foloseste formula generala de calcul a functiei Totient impreuna cu ideea Ciurului lui Eratostenes
	for(i=2;i<100000;i++)
		if(phi[i]==i)
			for(j=i;j<=100000;j+=i)
			{
				phi[j]/=i;
				phi[j]*=(i-1);
			}
	

	//Se citeste n
	fin>>n;
			
	//Se raspunde la fiecare intrebare in parte, folosind o formula usor de determinat matematic
	for(i=0;i<n;i++)
	{
		fin>>x;
		fout<<2*x*phi[x]<<'\n';
	}
	
	//Inchiderea fisierelor de intrare si iesire
	fin.close();
	fout.close();
	return 0;
}