fork download
  1. #include <iostream>
  2. #include <iterator>
  3. #include <cmath>
  4. #include <vector>
  5. #include <tuple>
  6. #include <algorithm>
  7. #include <cstdlib>
  8. #include <fstream>
  9.  
  10.  
  11. template <typename T>
  12. auto is_prime (T n) -> auto
  13. {
  14. const auto sqrt_n = static_cast<T> (sqrt (n)); // Тупо отбрасываем дробную часть.
  15. for (auto i = 2; i <= sqrt_n; i++)
  16. if (n % i == 0)
  17. return false;
  18. return true;
  19. }
  20.  
  21. template <typename T>
  22. auto generate_primes (T val) -> std::vector<std::tuple <T, T>>
  23. {
  24. std::vector <std::tuple <T, T>> result;
  25. const auto limit = static_cast<T> (val / 2); // Тут тоже.
  26. for (auto i = 2; i < limit; i++) { // <=
  27. if (is_prime (i) && is_prime (val-i)) {
  28. result.emplace_back (std::make_tuple (i, val-i));
  29. }
  30. }
  31. return result;
  32. }
  33.  
  34. template <typename T>
  35. auto generate_evens (const T start, const T end) -> std::vector<T>
  36. {
  37. std::vector<T> result;
  38. for (auto i = start; i <= end; ++i)
  39. result.emplace_back (i);
  40. return result;
  41. }
  42.  
  43. template <typename T>
  44. auto pass (const T start, const T end) -> T
  45. {
  46. std::vector<T> results;
  47. for (const auto& i : generate_evens (start, end)) {
  48. for (const auto& val : generate_primes (i)) {
  49. // std::cout << i << ": " << std::get<0> (val) << " " << std::get<1> (val) << std::endl; // NOTE: debug only
  50. results.emplace_back (std::get<0> (val));
  51. }
  52. // std::cout << "~~~~~" << std::endl; // NOTE: debug only
  53. }
  54. const auto result = std::max_element (results.begin (), results.end ());
  55. if (result != results.end ())
  56. return *result;
  57. return {};
  58. }
  59.  
  60. auto read_input () -> std::vector<int>
  61. {
  62. std::ifstream input_file ("input.txt");
  63. std::string line;
  64. std::getline (input_file, line);
  65. input_file.close ();
  66. //const char* input = "11 14";
  67. const char* input = line.c_str ();
  68. char* end;
  69. std::vector<int> args;
  70. for (long i = std::strtol (input, &end, 10); input != end; i = std::strtol (input, &end, 10)) {
  71. args.emplace_back (i);
  72. input = end;
  73. }
  74. return args;
  75. }
  76.  
  77. auto main () -> int
  78. {
  79. const auto args = read_input ();
  80. if (args.size () < 2)
  81. return 1; // Не хватает данных!
  82.  
  83. const auto fst = args[0];
  84. const auto snd = args[1];
  85.  
  86. std::cout << pass<int> (fst, snd);
  87. return 0;
  88. }
  89.  
Runtime error #stdin #stdout 0s 3456KB
stdin
11 14
stdout
Standard output is empty