Pagini recente » Cod sursa (job #3266025) | Cod sursa (job #1239413) | Cod sursa (job #1395390) | Cod sursa (job #1843121) | Cod sursa (job #1697885)
#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;
}