Top.Mail.Ru
Ответы

Задача №25. ЕГЭ по инфе. Решение дайте, пожалуйста, на Python.

Напишите программу, которая перебирает целые числа, большие 550 000, в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом. Программа должна найти и вывести первые таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из 6 таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.

Например, для числа 105 наибольший натуральный делитель 35 не является простым, для числа 15 наибольший натуральный делитель 5 — простое число, а для числа 13 такого делителя не существует.

По дате
По Рейтингу
Аватар пользователя
Мудрец

Здравствуйте, Мария.
Вот программа для Вас:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
 # Задаю самое первое число для анализа 
i = 550000 
# Задаю начальное значение для количества 
# найденных чисел 
count = 0 
# Запускаю цикл, который работает, пока я не найду 
# 6 нужных чисел 
while count < 6: 
    ############################################# 
    # Ищу наибольший делитель 
 
    # В d я хочу получить наибольший делитель 
    d = 0 
    for k in range(2, i//2 + 1): 
        # Если число i делится без остатка на k, 
        # тогда это - нужный мне делитель 
        if i % k == 0: 
            # Запоминаю нужный мне делитель 
            d = k 
    # Нашёл наибольший мне делитель. Он - в 
    # переменной d 
    ############################################# 
 
    # Если нашёл наибольший делитель, тогда 
    if d != 0: 
        ########################################## 
        # Проверяю, что у числа d нету делителей 
 
        # В is_ok храню признак, что число d мне 
        # подходит 
        is_ok = True 
        for k in range(2, d//2 + 1): 
            # Если число из d делится без остатка 
            # на k, тогда 
            if d % k == 0: 
                # ...устанавливаю признак, что мне 
                # это число не подходит. То есть я 
                # узнал, что число d не простое. 
                is_ok = False 
                # Выхожу из цикла 
                break 
        # 
        ########################################## 
 
        # Если число d - простое, то... 
        if is_ok: 
            # Вывожу на экран i и d 
            print(i, d) 
            # Увеличиваю количество найденных чисел 
            count += 1 
    # Перехожу к следующему числу 
    i += 1