#include #include #include #include typedef unsigned int uint_t; const uint_t D = 10; class Solver { void do_solve(std::vector &v, uint64_t sum, uint64_t prod, uint64_t n, uint8_t d) { uint_t l = v.size(); for (uint8_t j = d; j >= 2; j--) { v.push_back(j); uint64_t sumj = sum + j; uint64_t prodj = prod * j; uint64_t nj = (prodj - sumj) + l + 1; if (nj == n) { printf("%" PRIu64 ": ", n); for (uint8_t x: v) printf("%u ", (uint_t) x); printf("\n"); } if (nj <= n) do_solve(v, sumj, prodj, n, j); v.pop_back(); } } public: void solve(uint64_t n) { std::vector v; do_solve(v, 0, 1, n, D - 1); } }; int main() { Solver s; s.solve(5); return 0; }