Задание №25 — Проверка делимости
Пусть F — разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение F равным нулю.
Напишите программу, которая перебирает целые числа, большие 850 000, в порядке возрастания и ищет среди них такие, для которых значение F не равно нулю и делится нацело на 5. Программа должна найти и вывести первые 6 таких чисел и соответствующие им значения F.
Формат вывода: для каждого из 6 таких найденных чисел в отдельной строке сначала выводится само число, затем значение F. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа 105 F = 35 - 3 = 32.
Правильный ответ
850004 425000 850014 425005 850024 425010 850025 170000 850029 283340 850034 425015
Пояснение
Решение:
Ключевое наблюдение: наименьший делитель числа , не равный 1, — это его наименьший простой делитель , а наибольший делитель, не равный , — это . Действительно, если — делитель, то — тоже делитель, и наименьшему делителю соответствует наибольший. Значит а если простое, то «средних» делителей нет и .
Поэтому искать достаточно перебором до : для это менее 1000 шагов, и вся программа отрабатывает мгновенно.
Перебираем числа, большие 850 000, по возрастанию и выводим первые 6 таких, у которых и делится на 5.
def F(n):
d = 2
while d * d <= n:
if n % d == 0:
return n // d - d
d += 1
return 0
n = 850000
found = 0
while found < 6:
n += 1
f = F(n)
if f != 0 and f % 5 == 0:
print(n, f)
found += 1
Проверим пару строк вручную. Для наименьший простой делитель , значит — делится на 5. Для имеем , — тоже делится на 5. А, например, 850001 в ответ не попало: у него на 5 не делится.
Программа печатает шесть строк:
| Число | |
|---|---|
| 850004 | 425000 |
| 850014 | 425005 |
| 850024 | 425010 |
| 850025 | 170000 |
| 850029 | 283340 |
| 850034 | 425015 |
Ответ: 850004 425000 850014 425005 850024 425010 850025 170000 850029 283340 850034 425015