am1x icon

interestinga.cpp

am1x | PRO | 09/11/23 05:49:46 PM UTC | 0 ⭐ | 1197 👁️ | Never ⏰ | []
C++ |

760 B

|

Haiku

|

0 👍

/

0 👎

#include <stdio.h>
#include <assert.h>
#include <inttypes.h>
#include <vector>
 
typedef unsigned int uint_t;
const uint_t D = 10;
 
 
class Solver {
 
    void do_solve(std::vector<uint8_t> &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<uint8_t> v;
        do_solve(v, 0, 1, n, D - 1);
    }
 
};
 
 
int main()
{
    Solver s;
    s.solve(5);
 
    return 0;
}
 
 

Comments