fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdint>
  4. #include <math.h>
  5. #include <algorithm>
  6.  
  7. typedef std::vector<std::uint64_t> DType;
  8. //typedef std::pair<DType, double> RType;
  9. typedef std::pair<DType, std::uint64_t> RType;
  10. DType MakePrime(std::uint64_t N){
  11. DType R;
  12. R.push_back(2);
  13. bool F = false;
  14.  
  15. for (std::size_t i = 3; i <= N; i++)
  16. {
  17. F = true;
  18. for (auto o : R){
  19. if (i%o == 0){
  20. F = false;
  21. break;
  22. }
  23. }
  24. if (F == true) R.push_back(i);
  25.  
  26. }
  27. return R;
  28. }
  29. DType MnipArray2(DType D){
  30. std::uint64_t N = D.back();
  31. D.pop_back();
  32. D[0] += N;
  33.  
  34. return D;
  35. }
  36. DType MnipArray(DType D){
  37. std::uint64_t N = D.back();
  38. D.pop_back();
  39. for (std::size_t i = 0; i < N; i++)
  40. {
  41. D[i%D.size()]++;
  42. }
  43.  
  44. return D;
  45. }
  46.  
  47. RType MakeHoge(std::uint64_t N){
  48. std::int64_t X = N;
  49. auto P = MakePrime(static_cast<std::uint64_t>(X));//<- not need??
  50. DType R;
  51. double RD = 1;
  52. //std::uint64_t RD = 1;
  53.  
  54. DType T;
  55. double TD = 1;
  56. std::uint64_t A = 0;
  57. std::uint64_t B = 0;
  58.  
  59. while (X>1){
  60. for (auto o : P){
  61. if (X - o > 1){
  62. X -= o;
  63. R.push_back(o);
  64. break;
  65. }
  66.  
  67. }
  68. }
  69. if (X != 0) R.back() += X;
  70. std::swap(R[0], R.back());
  71.  
  72. T = R;
  73.  
  74. while (T.size() > 2){
  75. TD = 1;
  76. for (auto o : T) TD *= o;
  77. if (TD > RD){
  78. RD = TD;
  79. R = T;
  80. }
  81. std::reverse(T.begin(), T.end());
  82. //std::swap(T[0], T.back());
  83. T = MnipArray(T);
  84.  
  85. }
  86. return std::make_pair(R,RD);
  87. }
  88.  
  89. bool Show(RType& D){
  90.  
  91. std::cout << D.second << "@" << D.first.size() << "Count!" << std::endl;
  92. std::cout << "Result:" << std::endl;
  93. for (auto o : D.first) std::cout << o << ',';
  94. std::cout << std::endl;
  95. return true;
  96.  
  97. }
  98.  
  99. int main(){
  100.  
  101. RType R;
  102.  
  103. R=MakeHoge(10);
  104. Show(R);
  105. R=MakeHoge(64);
  106. Show(R);
  107. R=MakeHoge(100);
  108. Show(R);
  109. return 0;
  110. }
  111.  
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
36@4Count!
Result:
3,3,2,2,
5435817984@30Count!
Result:
3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,
1424967069597696@48Count!
Result:
3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,