Задание №25 — Проверка делимости
Напишите программу, которая перебирает целые числа, большие 350000, в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые 6 таких чисел и соответствующие им значения упомянутых делителей. Формат вывода: для каждого из 6 таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа 105 наибольший натуральный делитель 35 не является простым, для числа 15 наибольший натуральный делитель 5 — простое число, а для числа 13 такого делителя не существует.
Правильный ответ
350001 116667 350002 175001 350004 175002 350007 116669 350008 175004 350009 31819
Пояснение
Решение:
Наибольший делитель числа , не равный самому , — это , где — наименьший простой делитель . Поэтому достаточно найти перебором от 2 до , а затем проверить, простое ли частное .
Простые числа сразу отбрасываем: по условию для них такого делителя не существует. Заметим, что оставшееся условие равносильно тому, что число раскладывается минимум на три простых множителя с учётом кратности: если множителей всего два, то и частное простое.
def is_prime(x):
if x < 2:
return False
d = 2
while d * d <= x:
if x % d == 0:
return False
d += 1
return True
def big_div(n):
d = 2
while d * d <= n:
if n % d == 0:
return n // d # наибольший делитель, не равный n
d += 1
return 0 # n простое: такого делителя нет
n = 350000
found = 0
while found < 6:
n += 1
d = big_div(n)
if d != 0 and not is_prime(d):
print(n, d)
found += 1
Программа выводит:
350001 116667 350002 175001 350004 175002 350007 116669 350008 175004 350009 31819Ответ: 350001 116667 350002 175001 350004 175002 350007 116669 350008 175004 350009 31819