Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <set>
- #include <vector>
- #include <utility>
- #include <stdint.h>
- using namespace std;
- typedef int64_t i64;
- bool IsPrime(i64 n) {
- if (n == 2) return true;
- if (n % 2 == 0) return false;
- for (i64 i = 3; i * i <= n; i += 2) {
- if (n % i == 0) return false;
- }
- return true;
- }
- void main() {
- set<i64> good_sums;
- // Operations done by second wiseman.
- for (i64 a = 2; a <= 100; ++a) {
- for (i64 b = 2; b <= 100; ++b) {
- i64 sum = a + b;
- i64 mul = a * b;
- bool good_sum = true;
- for (i64 a2 = 2; a2 <= sum - 2; ++a2) {
- i64 b2 = sum - a2;
- if (IsPrime(a2) && IsPrime(b2)) {
- good_sum = false;
- //std::cout << "a2 = " << a2 << ", b2 = " << b2 << std::endl;
- }
- }
- if (good_sum) {
- good_sums.insert(sum);
- }
- }
- }
- cout << "GoodSums" << endl;
- for (auto it = good_sums.begin(); it != good_sums.end(); ++it) {
- cout << *it << " ";
- }
- cout << endl;
- // Operations done by second wiseman.
- set<i64> good_muls;
- for (i64 m_1 = 2; m_1 <= 100; ++m_1) {
- if (!IsPrime(m_1)) continue;
- for (i64 m_2 = m_1; m_2 <= 100; ++m_2) {
- if (!IsPrime(m_2)) continue;
- for (i64 m_3 = m_2; m_3 <= 100; ++m_3) {
- if (!IsPrime(m_3)) continue;
- set<i64> possible_sums;
- possible_sums.insert(m_1 + m_2 * m_3);
- possible_sums.insert(m_2 + m_1 * m_3);
- possible_sums.insert(m_3 + m_1 * m_2);
- i64 num_good_sums = 0;
- for (auto it = possible_sums.begin(); it != possible_sums.end(); ++it) {
- if (good_sums.count(*it) > 0) ++num_good_sums;
- }
- if (num_good_sums == 1) good_muls.insert(m_1 * m_2 * m_3);
- for (i64 m_4 = m_3; m_4 <= 100; ++m_4) {
- if (!IsPrime(m_4)) continue;
- set<i64> possible_sums;
- possible_sums.insert(m_1 + m_2 * m_3 * m_4);
- possible_sums.insert(m_2 + m_1 * m_3 * m_4);
- possible_sums.insert(m_3 + m_1 * m_2 * m_4);
- possible_sums.insert(m_4 + m_1 * m_2 * m_4);
- possible_sums.insert(m_1 * m_2 + m_3 * m_4);
- possible_sums.insert(m_1 * m_3 + m_2 * m_4);
- possible_sums.insert(m_1 * m_4 + m_2 * m_3);
- i64 num_good_sums = 0;
- for (auto it = possible_sums.begin(); it != possible_sums.end(); ++it) {
- if (good_sums.count(*it) > 0) ++num_good_sums;
- }
- if (num_good_sums == 1) good_muls.insert(m_1 * m_2 * m_3 * m_4);
- }
- }
- }
- }
- cout << "Answers" << endl;
- for (auto it = good_sums.begin(); it != good_sums.end(); ++it) {
- i64 good_muls_count = 0;
- i64 ans_a = 0, ans_b = 0;
- vector<i64> muls;
- for (auto a2 = 2; a2 <= *it - 2; ++a2) {
- i64 b2 = *it - a2;
- if (a2 > b2 || a2 > 100 || b2 > 100) continue;
- if (good_muls.count(a2 * b2) > 0) {
- ++good_muls_count;
- muls.push_back(a2 * b2);
- ans_a = a2, ans_b = b2;
- }
- }
- if (good_muls_count == 1) {
- cout << "a = " << ans_a << ", b = " << ans_b << ", sum = " << (ans_a + ans_b) << ", mul = " << (ans_a * ans_b) << endl;
- /*
- for (int i = 0; i < muls.size(); ++i) {
- cout << muls[i] << " ";
- }
- cout << endl;
- */
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment