Задание 17. Информатика. ЕГЭ. Поляков-7682

Просмотры: 108
Изменено: 24 ноября 2024

(К. Багдасарян) В файле содержится последовательность натуральных чисел, не превышающих \(1000\). Определите количество пар элементов последовательности, в которых элементы пары взаимно просты (т.е. не имеют общих делителей, кроме \(1\)) и имеют разную четность. В ответе запишите количество найденных пар, затем минимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два подряд идущих элемента последовательности.

Файл с данными

Решение:

Python


from math import gcd

base = ''
nums = [int(x) for x in open(base + '17.txt')]
q = 0
min_sum = 10000000

for x, y in zip(nums, nums[1:]):
    if gcd(x, y) == 1 and x % 2 != y % 2:
        q += 1
        min_sum = min(min_sum, x + y)

print(q, min_sum)

C++


#include<iostream>
#include<fstream>
#include<vector>
#include<string>

using namespace std;

int gcd(int x, int y) {
    while (x != y) {
        if (x > y) {
            int t = x % y;
            x = (t) ? t : y;
        }
	else {
            int t = y % x;
            y = (t) ? t : x;
        }
    }
    return x;
}

int32_t main() {
    vector<int> nums;
    string base = "";
    ifstream in(base + "17.txt");
    int min_sum = 1000000, q = 0;
    while (!in.eof()) {
        int t;
	in >> t;
        nums.push_back(t);
    }
    for(int i = 0; i < nums.size() - 1; i++)
        if (gcd(nums[i], nums[i+1]) == 1 &&  nums[i] % 2 != nums[i+1] % 2) {
            q++;
            min_sum = min(min_sum, nums[i] + nums[i+1]);
        }

    cout << q << " " << min_sum  << endl;
}

Ответ: \(2 \,\, 953\)