fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdint>
  4. #include <math.h>
  5.  
  6. typedef std::vector<std::uint64_t> DType;
  7. typedef std::pair<DType, double> RType;
  8.  
  9. //Nは与えられてないし、結果を先読みしてそこからNを求めろとは書いてない
  10. //故、任意のNを自作してその最大値を求めることを試みた。
  11.  
  12. DType MakePrime(std::uint64_t N){
  13. DType R;
  14. R.push_back(2);
  15. bool F = false;
  16.  
  17. for (std::size_t i = 3; i <= N; i++)
  18. {
  19. F = true;
  20. for (auto o : R){
  21. if (i%o == 0){
  22. F = false;
  23. break;
  24. }
  25. }
  26. if (F == true) R.push_back(i);
  27.  
  28. }
  29. return R;
  30. }
  31.  
  32. RType MakeHoge(std::uint64_t N){
  33. std::int64_t X = N;
  34. auto P = MakePrime(static_cast<std::uint64_t>(X));//<- not need??
  35. DType R;
  36. double RD = 1;
  37.  
  38. while (X>1){
  39. for (auto o : P){
  40. if (X - o > 1){
  41. X -= o;
  42. R.push_back(o);
  43. break;
  44. }
  45.  
  46. }
  47. }
  48. if (X != 0) R.back() += X;
  49.  
  50. for (auto o : R) RD *= o;
  51.  
  52. return std::make_pair(R,RD);
  53. }
  54.  
  55. bool Show(RType& D){
  56.  
  57. std::cout << D.second << "@" << D.first.size() << "Count!" << std::endl;
  58. return true;
  59.  
  60. }
  61.  
  62. int main(){
  63.  
  64. RType R;
  65.  
  66. R=MakeHoge(10);
  67. Show(R);
  68. R=MakeHoge(64);
  69. Show(R);
  70. R=MakeHoge(100);
  71. Show(R);
  72. return 0;
  73. }
  74.  
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
32@5Count!
4.29497e+09@32Count!
1.1259e+15@50Count!