moytrage

two_wisemen_and_two_numbers_v2.cc

Oct 5th, 2014
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. #include <utility>
  5. #include <stdint.h>
  6.  
  7. using namespace std;
  8. typedef int64_t i64;
  9.  
  10. bool IsPrime(i64 n) {
  11.   if (n == 2) return true;
  12.   if (n % 2 == 0) return false;
  13.   for (i64 i = 3; i * i <= n; i += 2) {
  14.     if (n % i == 0) return false;
  15.   }
  16.   return true;
  17. }
  18.  
  19. void main() {
  20.   set<i64> good_sums;
  21.   // Operations done by second wiseman.
  22.   for (i64 a = 2; a <= 100; ++a) {
  23.     for (i64 b = 2; b <= 100; ++b) {
  24.       i64 sum = a + b;
  25.       i64 mul = a * b;
  26.       bool good_sum = true;
  27.       for (i64 a2 = 2; a2 <= sum - 2; ++a2) {
  28.         i64 b2 = sum - a2;
  29.         if (IsPrime(a2) && IsPrime(b2)) {
  30.           good_sum = false;
  31.           //std::cout << "a2 = " << a2 << ", b2 = " << b2 << std::endl;
  32.         }
  33.       }
  34.       if (good_sum) {
  35.         good_sums.insert(sum);
  36.       }
  37.     }
  38.   }
  39.   cout << "GoodSums" << endl;
  40.   for (auto it = good_sums.begin(); it != good_sums.end(); ++it) {
  41.     cout << *it << " ";
  42.   }
  43.   cout << endl;
  44.   // Operations done by second wiseman.
  45.   set<i64> good_muls;
  46.   for (i64 m_1 = 2; m_1 <= 100; ++m_1) {
  47.     if (!IsPrime(m_1)) continue;
  48.     for (i64 m_2 = m_1; m_2 <= 100; ++m_2) {
  49.       if (!IsPrime(m_2)) continue;
  50.       for (i64 m_3 = m_2; m_3 <= 100; ++m_3) {
  51.         if (!IsPrime(m_3)) continue;
  52.         set<i64> possible_sums;
  53.         possible_sums.insert(m_1 + m_2 * m_3);
  54.         possible_sums.insert(m_2 + m_1 * m_3);
  55.         possible_sums.insert(m_3 + m_1 * m_2);
  56.         i64 num_good_sums = 0;
  57.         for (auto it = possible_sums.begin(); it != possible_sums.end(); ++it) {
  58.           if (good_sums.count(*it) > 0) ++num_good_sums;
  59.         }
  60.         if (num_good_sums == 1) good_muls.insert(m_1 * m_2 * m_3);
  61.  
  62.         for (i64 m_4 = m_3; m_4 <= 100; ++m_4) {
  63.           if (!IsPrime(m_4)) continue;
  64.          
  65.           set<i64> possible_sums;
  66.           possible_sums.insert(m_1 + m_2 * m_3 * m_4);
  67.           possible_sums.insert(m_2 + m_1 * m_3 * m_4);
  68.           possible_sums.insert(m_3 + m_1 * m_2 * m_4);
  69.           possible_sums.insert(m_4 + m_1 * m_2 * m_4);
  70.           possible_sums.insert(m_1 * m_2 + m_3 * m_4);
  71.           possible_sums.insert(m_1 * m_3 + m_2 * m_4);
  72.           possible_sums.insert(m_1 * m_4 + m_2 * m_3);
  73.           i64 num_good_sums = 0;
  74.           for (auto it = possible_sums.begin(); it != possible_sums.end(); ++it) {
  75.             if (good_sums.count(*it) > 0) ++num_good_sums;
  76.           }
  77.           if (num_good_sums == 1) good_muls.insert(m_1 * m_2 * m_3 * m_4);
  78.         }
  79.       }
  80.     }
  81.   }
  82.  
  83.   cout << "Answers" << endl;
  84.   for (auto it = good_sums.begin(); it != good_sums.end(); ++it) {
  85.     i64 good_muls_count = 0;
  86.     i64 ans_a = 0, ans_b = 0;
  87.     vector<i64> muls;
  88.     for (auto a2 = 2; a2 <= *it - 2; ++a2) {
  89.       i64 b2 = *it - a2;
  90.       if (a2 > b2 || a2 > 100 || b2 > 100) continue;
  91.       if (good_muls.count(a2 * b2) > 0) {
  92.         ++good_muls_count;
  93.         muls.push_back(a2 * b2);
  94.         ans_a = a2, ans_b = b2;
  95.       }
  96.     }
  97.     if (good_muls_count == 1) {
  98.       cout << "a = " << ans_a << ", b = " << ans_b << ", sum = " << (ans_a + ans_b) << ", mul = " << (ans_a * ans_b) << endl;
  99.       /*
  100.       for (int i = 0; i < muls.size(); ++i) {
  101.         cout << muls[i] << " ";
  102.       }
  103.       cout << endl;
  104.       */
  105.     }
  106.   }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment