Advertisement
am1x

interestingb.cpp

Sep 11th, 2023
871
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | Haiku | 0 0
  1. #include <stdio.h>
  2. #include <assert.h>
  3. #include <inttypes.h>
  4. #include <vector>
  5.  
  6. typedef unsigned int uint_t;
  7. const uint_t D = 10;
  8.  
  9.  
  10. class Solver {
  11.     std::vector<uint_t> cnts;
  12.  
  13.  
  14.     void do_solve(std::vector<uint8_t> &v, uint64_t sum, uint64_t prod, uint64_t n, uint8_t d)
  15.     {
  16.         uint_t l = v.size();
  17.         for (uint8_t j = d; j >= 2; j--) {
  18.             v.push_back(j);
  19.             uint64_t sumj = sum + j;
  20.             uint64_t prodj = prod * j;
  21.             uint64_t nj = (prodj - sumj) + l + 1;
  22. #if 0
  23.             if (nj <= n) {
  24.                 printf("%" PRIu64 ": ", n);
  25.                 for (uint8_t x: v)
  26.                     printf("%u ", (uint_t) x);
  27.                 printf("\n");
  28.             }
  29. #endif
  30.             if (nj <= n) {
  31.                 cnts[nj]++;
  32.                 do_solve(v, sumj, prodj, n, j);
  33.             }
  34.             v.pop_back();
  35.         }
  36.     }
  37.  
  38.  public:
  39.     void solve(uint64_t n)
  40.     {
  41.         cnts.clear();
  42.         cnts.resize(n + 1, 0);
  43.  
  44.         std::vector<uint8_t> v;
  45.         do_solve(v, 0, 1, n, D - 1);
  46.  
  47.         for (uint_t i = 2; i <= n; i++) {
  48.             printf("%6u: %u \n", i, cnts[i]);
  49.         }
  50.     }
  51.  
  52. };
  53.  
  54.  
  55. int main()
  56. {
  57.     Solver s;
  58.     s.solve(1000000);
  59.  
  60.     return 0;
  61. }
  62.  
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement