Cod sursa(job #1697885)

Utilizator perjulucianPerju Lucian Ionut perjulucian Data 3 mai 2016 03:38:31
Problema Fractii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <cmath>
std::ifstream infile("fractii.in");
std::ofstream outfile("fractii.out");

std::unordered_map<int,int> getDivisors(int n){
	int tmp = n;
	std::unordered_map<int,int> toReturn;

	int lim = n/2;

	for(int i = 2; i <= lim ; ++i){
		if(n % i != 0){
			continue;
		}

		toReturn[i] = 0;
		while(n % i == 0){
			toReturn[i]++;
			n = n / i;
		}	
	}
	if(toReturn.empty()){//prime number
		toReturn[tmp] = 1;
	}
	return toReturn;
}
int getPhi(int n){
	std::unordered_map<int,int> divisors;
	divisors = getDivisors(n);
	int phi = 1;
	for(auto iter:divisors){
		phi *= (iter.first - 1) * (int)(pow(iter.first,iter.second-1)); 
	}
	return phi;
}
int getSum(int n){
	int sum = 0;
	for(int i = 2 ; i <= n ; ++i){
		sum += getPhi(i);
	}
	sum *= 2;
	return sum + 1;
}

int main(){
	int N;
	infile >> N;
	std::unordered_map<int,int> divisors;

	outfile << getSum(N);

	infile.close();
	outfile.close();
	return 0;

}