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

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

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

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

Решение:

Python


from math import gcd

base = ''
nums = [int(x) for x in open(base + '17.txt')]
min_el = min([x for x in nums if x % 10 == 3])
max_sum = 0
q = 0

for x, y in zip(nums, nums[1:]):
    if min_el % gcd(x, y) == 0:
        q += 1
        max_sum = max(x + y, max_sum)

print(q, max_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_el = 1000000, max_sum = 0, q = 0;
    while (!in.eof()) {
        int t;
	in >> t;
        nums.push_back(t);
        if (t % 10 == 3)
            min_el = min(min_el, t);
    }
    for(int i = 0; i < nums.size() - 1; i++)
        if (min_el %  gcd(nums[i], nums[i+1]) == 0) {
            q++;
            max_sum = max(max_sum, nums[i] + nums[i+1]);
        }

    cout << q << " " << max_sum  << endl;
}

Ответ: \(14 \,\, 1767\)