1. В файле 17-199.txt содержится последовательность целых чисел, которые принимают значения от -10000 до 10000 включительно. Тройка идущих подряд чисел последовательности называется уникальной, если только второе из них является положительным трёхзначным нечётным числом. Определите количество уникальных троек чисел, а затем – максимальную из всех сумм таких троек. файл - https://kpolyakov.spb.ru/cms/files/ege-seq/17-199.txt
2. Обозначим через S сумму делителей числа, не являющихся простыми, кроме единицы и самого числа. Если таких делителей у числа нет, то S равно нулю. Напишите программу, которая перебирает нечетные целые числа, меньшие 912673, в порядке убывания и ищет среди них первые 5 чисел, которые кратны S. Для каждого из найденных чисел в отдельной строке сначала выводится само число, затем значение S. Строки выводятся в порядке убывания найденных чисел.
- Скачиваем файл 17-199.txt, содержащий последовательность целых чисел.
- Открываем файл и считываем последовательность чисел в массив.
- Инициализируем переменные count и max_sum, которые будут хранить количество уникальных троек и максимальную сумму соответственно.
- Проходим по массиву чисел от индекса 1 до индекса len(numbers)-2 (так как требуется работать с тройками чисел).
- Внутри цикла проверяем условия для определения уникальной тройки:
* Проверяем, что числа a1, a2, a3 являются тройкой подряд идущих чисел.
* Проверяем, что число a2 является положительным, трехзначным и нечетным.
- Если условия выполняются, увеличиваем count на 1 и обновляем значение max_sum, если сумма тройки чисел больше текущего max_sum.
- Выводим на экран значение count и max_sum.
2. Для решения задачи мы будем выполнять следующие шаги:
- Инициализируем переменные count и number, которые будут хранить количество найденных чисел и число, для которого вычисляется значение S соответственно.
- Проходим по числам от 912673 до 1 с шагом -2 (так как ищем только нечетные числа в порядке убывания).
- Внутри цикла проверяем условие для нахождения числа, которое кратно S:
* Вычисляем значение S для текущего числа с помощью функции calculate_s.
* Если значение S не равно нулю и число number кратно S, увеличиваем count на 1 и выводим на экран число и значение S.
- Если count достигло значения 5, завершаем цикл.
- Выводим на экран итоговое количество найденных чисел и завершаем программу.
Обоснование:
1. Для решения первой задачи необходимо выполнить несколько проверок для каждой тройки чисел в последовательности. Проверяем тройки на соответствие условиям уникальности и второе число тройки на положительность, трехзначность и нечетность. Если тройка подходит под условия, увеличиваем счетчик и, если сумма тройки больше текущего максимума, обновляем максимальную сумму. Выводим на экран результаты.
2. Во второй задаче мы перебираем нечетные числа в порядке убывания и для каждого числа вычисляем значение S с помощью функции calculate_s. Если значение S не равно нулю и число кратно S, увеличиваем счетчик и выводим результаты. Когда счетчик достигает значения 5, завершаем цикл и завершаем программу.
Пояснение:
1. Уникальную тройку составляют три числа подряд.
2. При сравнении третьего числа число второй заходит в тройку.
3. Число S равно сумме делителей числа, не являющихся простыми.
4. Значение S равно нулю, если у числа нет делителей, не являющихся простыми.
5.
Шаги по решению первой задачи:
1. Скачиваем файл 17-199.txt, содержащий последовательность целых чисел.
2. Открываем файл и считываем последовательность чисел в массив.
3. Инициализируем переменные count и max_sum со значением 0.
4. Проходим по массиву чисел с шагом 1 (от индекса 0 до len(numbers)-2).
5. В каждой итерации получаем тройку чисел, состоящую из текущего числа (a1), следующего числа (a2) и числа после следующего (a3) с помощью индексов.
6. Проверяем условия, что a2 - положительное, трехзначное и нечетное число, а a1 и a3 - в пределах от -10000 до 10000.
7. Если все условия выполняются, увеличиваем счетчик count на 1.
8. Если сумма тройки чисел больше текущего значения max_sum, обновляем max_sum.
9. По окончании цикла выводим значения count и max_sum.
Шаги по решению второй задачи:
1. Инициализируем переменные count и number со значением 0.
2. Начинаем цикл с числа 912673 и уменьшаем его на 2 на каждой итерации (так как ищем только нечетные числа в порядке убывания).
3. Внутри цикла выполняем следующие действия:
а. Вычисляем значение S для текущего числа с помощью функции calculate_s.
б. Проверяем, что значение S не равно нулю и число кратно S.
в. Если условие выполняется, увеличиваем счетчик count на 1 и выводим на экран число и значение S.
г. Если счетчик count достигает значения 5, завершаем цикл.
4. По окончании цикла выводим значение count.
Решение первой задачи в Python:
```
def calculate_s(num):
divisors_sum = 1
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
if i != num // i:
divisors_sum += (i + num // i)
else:
divisors_sum += i
return divisors_sum
filename = '17-199.txt'
with open(filename, 'r') as file:
numbers = [int(num) for num in file.read().split()]
count = 0
max_sum = float('-inf')
for i in range(1, len(numbers) - 1):
a1 = numbers[i - 1]
a2 = numbers[i]
a3 = numbers[i + 1]
if a2 > 0 and 100 <= a2 <= 999 and a2 % 2 != 0:
count += 1
current_sum = a1 + a2 + a3
if current_sum > max_sum:
max_sum = current_sum
print(f'Количество уникальных троек: {count}')
print(f'Максимальная сумма троек: {max_sum}')
```
Решение второй задачи в Python:
```
def calculate_s(num):
divisors_sum = 1
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
if i != num // i:
divisors_sum += (i + num // i)
else:
divisors_sum += i
return divisors_sum
count = 0
number = 912673
while count < 5:
s = calculate_s(number)
if s != 0 and number % s == 0:
count += 1
print(f'{number} - {s}')
number -= 2
```