#include <iostream>
#include <vector>
#include <numeric>
std::vector<int> primeFactors(int n) {
std::vector<int> f;
for (int p = 2; p * p <= n; p++) {
while (n % p == 0) {
f.push_back(p);
n /= p;
}
}
if (n > 1) f.push_back(n);
return f;
}
bool isSumProduct(int n, std::vector<int>& outFactors) {
auto f = primeFactors(n);
long long product = std::accumulate(f.begin(), f.end(), 1LL,
[](long long a, long long b) { return a * b; });
long long sum = std::accumulate(f.begin(), f.end(), 0LL);
// Add 1's until sum == product
while (sum < product) {
f.push_back(1);
sum += 1;
}
if (sum == product) {
outFactors = f;
return true;
}
return false;
}
int main() {
for (int n = 5; n <= 14; n++) {
std::vector<int> factors;
if (isSumProduct(n, factors) && factors.size() > 1) {
std::cout << n << " = ";
for (size_t i = 0; i < factors.size(); i++) {
std::cout << factors[i];
if (i + 1 < factors.size()) std::cout << " * ";
}
std::cout << " = ";
for (size_t i = 0; i < factors.size(); i++) {
std::cout << factors[i];
if (i + 1 < factors.size()) std::cout << " + ";
}
std::cout << " = ";
long long sum = std::accumulate(factors.begin(), factors.end(), 0LL);
std::cout << sum << "\n";
}
}
}
/*
run:
6 = 2 * 3 * 1 = 2 + 3 + 1 = 6
8 = 2 * 2 * 2 * 1 * 1 = 2 + 2 + 2 + 1 + 1 = 8
9 = 3 * 3 * 1 * 1 * 1 = 3 + 3 + 1 + 1 + 1 = 9
10 = 2 * 5 * 1 * 1 * 1 = 2 + 5 + 1 + 1 + 1 = 10
12 = 2 * 2 * 3 * 1 * 1 * 1 * 1 * 1 = 2 + 2 + 3 + 1 + 1 + 1 + 1 + 1 = 12
14 = 2 * 7 * 1 * 1 * 1 * 1 * 1 = 2 + 7 + 1 + 1 + 1 + 1 + 1 = 14
*/