Задание №25 — Проверка делимости
Пусть F - разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение F равным 0.
Напишите программу, которая перебирает целые числа, большие 850000, в порядке возрастания и ищет среди них такие, для которых значение F не равно 0 и делится нацело на 7. Программа должна вывести первые шесть таких чисел и соответствующие им значения F.
Формат вывода: для каждого из 6 найденных чисел в отдельной строке сначала выводится само число, затем значение F. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа 105 F = 35 - 3 = 32.
Правильный ответ
850003 121422 850005 283332 850014 425005 850028 425012 850042 425019 850047 283346
Пояснение
Решение:
У целого числа наименьший делитель, отличный от единицы, — это его наименьший простой делитель . Ему в пару идёт наибольший делитель, отличный от самого числа, равный . Значит, оба «крайних» делителя находятся за один проход: достаточно перебрать от 2 до и остановиться на первом, который делит . Если такого нет, число простое, промежуточных делителей у него нет.
Нужны числа, у которых не равно нулю и делится на 7. Условие отсекает простые числа (у них промежуточных делителей нет) и заодно числа вида , для которых . Перебираем числа, начиная с 850001, по возрастанию, пока не наберём шесть подходящих.
def M(n):
d = 2
while d * d <= n:
if n % d == 0:
return n // d - d # наибольший делитель минус наименьший
d += 1
return 0 # n простое: делителей нет
n = 850000
found = 0
while found < 6:
n += 1
f = M(n)
if f != 0 and f % 7 == 0:
print(n, f)
found += 1
Программа выводит:
850003 121422 850005 283332 850014 425005 850028 425012 850042 425019 850047 283346Ответ: 850003 121422 850005 283332 850014 425005 850028 425012 850042 425019 850047 283346