Задача
Рассматривается множество целых чисел, принадлежащих числовому отрезку [1016; 7937], которые делятся на 3 и не делятся на 7, 17, 19, 27. Найдите количество таких чисел и максимальное из них. В ответе запишите два целых числа: сначала количество, затем максимальное число.
Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц.
Решение (Электронные таблицы)
Создадим пустой файл Microsoft Excel.
В ячейку A1 внесем начальное значение числового промежутка - 1016.
Теперь необходимо заполнить столбец А значениями из промежутка [1016; 7937].
Это можно сделать двумя способами. Способ первый.
А ячейку A2 запишем формулу: =А1+1. Затем эту формулу скопировать ниже по столбцу А, пока в результате не появится цифра 7937.
Второй способ.
Использование команды "Заполнить".
В ниспадающем меню необходимо выбрать команду "Прогрессия".
В окне ввода параметров выполнения команды необходимо указать шаг (1), направление заполнения (по столбцам) и конечное число. При этом ячнйка А1 должна быть выделена.
В ячейку В1 вводим формулу, которая определит, делится ли число в ячейке А1 на 3: =ОСТАТ(А1;3)=0
Двойным щелчком по маркеру заполнения скопируем формулу на весь столбец (пока не кончатся данные в столбце A).
В ячейку С1 вводим формулу, которая определит, не делится ли число в ячейке А1 на 7: =ОСТАТ(А1;7)<>0. Двойным щелчком по маркеру заполнения скопируем формулу на весь столбец (пока не кончатся данные в столбце A).
В столбцах D, E, F аналогично введем формулу, определяющую не делится ли соответствующее значение в столбце А на 17, 19 и 27.
В столбце G используем для того, чтобы определить, если все значения ячеек в столбцах B-F в этой строке истинны, необходимо вывести значение из ячейки А1, иначе – пустую строку.
В столбце G отображаются значения, которые удовлетворяют условию задачи.
Для нахождения количества значений и максимального из них в любые свободные ячейки введем формулы:
=СЧЁТ(G:G)
=МАКС(G:G)
Ответ: 1568 7935
Решение (Программа, Python)
Во-первых, нет ограничения на время выполнения, по крайней мере, оно несущественно для отрезков, заданных для перебора, поэтому можно использовать простой перебор без оптимизации.
В случае произвольного отрезка [a, b], количество чисел k, удовлетворяющих определенному условию:
k=0
for n in range(a, b+1):
if <условие>:
k+=1
Теперь разберемся с <условием>. Числа должны деляться на 3 (остаток от деления на 3 равен нулю) и не деляться на 7, 17, 19, 27 (остаток от деления на указанные числа не равен нулю). Поскольку все эти требования предъявляются к одному числу, то их между собой необходимо объединить логической связкой И.
Т.к. мы перебираем числа из интервала, упорядоченного в порядке возрастания, то последнее число, удовлетворяющее условию и будет максимальным, в переменной max будем хранить это значение.
Таким образом, полная программа будет иметь вид:
max=0
if (n%3=0) and (n%7<>0) and (n%17<>0) and (n%19<>0) and (n%27<>0):
k+=1
max=n
print(k,max)
Ответ: 1568 7935