fork(1) download
  1. #include <iostream>
  2. #include <utility>
  3. #include <vector>
  4.  
  5. bool increase(const std::vector<std::pair<std::size_t, std::size_t>>& v,
  6. std::vector<std::size_t>& it)
  7. {
  8. for (std::size_t i = 0, size = it.size(); i != size; ++i) {
  9. const std::size_t index = size - 1 - i;
  10. ++it[index];
  11. if (it[index] > v[index].second) {
  12. it[index] = 0;
  13. } else {
  14. return true;
  15. }
  16. }
  17. return false;
  18. }
  19.  
  20. std::size_t pow(std::size_t n, std::size_t power)
  21. {
  22. std::size_t res = 1;
  23. for (std::size_t i = 0; i != power; ++i) {
  24. res *= n;
  25. }
  26. return res;
  27. }
  28.  
  29. void do_job(const std::vector<std::pair<std::size_t, std::size_t>>& v,
  30. std::vector<std::size_t> it)
  31. {
  32. std::size_t res = 1;
  33. for (std::size_t i = 0; i != v.size(); ++i) {
  34. res *= pow(v[i].first, it[i]);
  35. }
  36. std::cout << res << std::endl;
  37. }
  38.  
  39. void iterate(const std::vector<std::pair<std::size_t, std::size_t>>& v)
  40. {
  41. std::vector<std::size_t> it(v.size(), 0);
  42.  
  43. do {
  44. do_job(v, it);
  45. } while (increase(v, it));
  46. }
  47.  
  48. int main()
  49. {
  50. const std::vector<std::pair<std::size_t, std::size_t>> v{{2, 2}, {3, 1}, {5, 1}, {7, 2}};
  51.  
  52. iterate(v);
  53. }
  54.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
1
7
49
5
35
245
3
21
147
15
105
735
2
14
98
10
70
490
6
42
294
30
210
1470
4
28
196
20
140
980
12
84
588
60
420
2940