Задание 25
Алгоритм решения:
Нужно найти такую последовательность чисел, длинною 5, начинающиюся с 700000, что каждый следующий элемент имеет больше делителей. Иными словами, нужно найти такие числа, что их количество делителей постоянно растёт. Особенность этой задачи в том, что числа могут идти неподряд, а c промежуток.
Функция для нахождения делителей числа:
def find_divisors(number):
divisors_set = set()
for divisor in range(1, int(number**0.5) + 1):
if number % divisor == 0:
divisors_set.add(divisor)
divisors_set.add(number / divisor)
return len(divisors_set)Это основая часть кода. Функция принимает число, а затем ищет делители числа до корень + 1. Этот метод связан со свойством делителей числа. Данная функция универсальна, и применяется во многих задачах на ЕГЭ.
Более подробно познакомиться с этой функцией поможет Алексей Кабанов
Основное тело алгоритма:
last_divisors = find_divisors(700000)
numbers_list = [700000]
for number in range(700001, 1000000):
current_divisors = find_divisors(number)
if current_divisors > last_divisors:
numbers_list.append(number)
last_divisors = current_divisors
if len(numbers_list) == 5:
for num in numbers_list:
print(num, find_divisors(num))
break - Вычисляем количество делителей для начального числа 700 000
- Создаём лист последовательности, с начальным числом 700 000
- Ищем числа от 700 001 до 1 000 000 (т.к 700 000 мы уже добавили)
- Вычисляем количество делителей для текущего числа
- Если у текущего числа количество делителей больше, то:
- Добавляем это число в последовательность
- Обновляем текущие количество делителей, для следующего числа
- Если длинна последовательности равна 5, то выводим её вместе с делителями каждого числа
Как можно подметить, таким образом, можно вычислить бесконечную последовательность чисел, где кол-во делителей следующего числа больше, но по заданию она ограничена длинной 5 (по-факту, она ограничено 1 000 000).
700000 72
700128 144
702000 160
702240 192
720720 240
Полный код:
def find_divisors(number):
divisors_set = set()
for divisor in range(1, int(number**0.5) + 1):
if number % divisor == 0:
divisors_set.add(divisor)
divisors_set.add(number / divisor)
return len(divisors_set)
last_divisors = find_divisors(700000)
numbers_list = [700000]
for number in range(700001, 1000000):
current_divisors = find_divisors(number)
if current_divisors > last_divisors:
numbers_list.append(number)
last_divisors = current_divisors
if len(numbers_list) == 5:
for num in numbers_list:
print(num, find_divisors(num))
break Редактор: andy