19.11.2025

Задание 25 (ЕГЭ по информатике) поиск чисел, которые являются степенью простого числа с натуральным показателем степени, большим 1

 Задача (№ 25, ЕГЭ по информатике)

Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, которые являются степенью простого числа с натуральным показателем степени, большим 1.
В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце - для каждого из чисел соответствующие им простое число.

Например, число 27 = 33

Количество строк в таблице для ответа избыточно.

Алгоритм решения

  1. Перебираем числа, начиная с 700 001.

  2. Для каждого числа находим его разложение на простые множители с учётом кратности (функция f(n)).

  3. Проверяем два условия:

    • Количество множителей в разложении больше 1 (показатель степени > 1).

    • Все множители одинаковые (число является степенью одного простого числа).

  4. Как только находим 5 таких чисел, завершаем перебор.

Программа решения задачи на языке Python

def f(n):
    d = []
    for k in range(2, int(n**0.5) + 1):
        while n % k == 0:
            d.append(k)
            n //= k
    if n > 1:
        d.append(n)
    return d

k = 0
x = 700001
while k != 5:
    y = f(x)
    y1 = set(y)
    if len(y) > 1 and len(y1) == 1:
        print(x, y[0])
        k += 1
    x += 1
Пояснения
  • Функция f(n) возвращает список простых делителей числа n (например, для числа 72 → [2, 2, 2, 3, 3]).

  • y1 = set(y) оставляет только уникальные делители. Если все делители одинаковые, длина множества будет равна 1.

  • Условие len(y) > 1 гарантирует, что показатель степени больше 1.

Результат выполнения программы

703921 839

704969 89

707281 29

727609 853

734449 857


03.07.2025

ЕГЭ по информатике. Задание 25. Поиск чисел, представленных в виде произведения ровно двух простых множителей, не обязательно различных

Задача. Напишите программу, которая перебирает целые числа, большие 6 651 220, в порядке возрастания и ищет среди них числа, представленные в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи ровно одну цифру 2.

В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце - для каждого из чисел соответствующий им наибольший из найденных множителей.

Источник: kompege.ru

Пример числа:

Число 6651241 можно разложить на 2579 × 2579, и оба этих множителя — простые числа, содержащие ровно одну цифру "2".

Напишем функцию, которая возвращает список простых множителей, в виде произведения которых можно представить заданное натуральное число.

def f(n):

    a = []

    for k in range(2,int(n**0.5)+1):

        while n%k==0:

            a.append(k)

            n//=k

    if n>1:

        a.append(n)

    return a

  • В цикле для k от 2 до √n: пока число n делится на k, добавляем число k в список множителей.

  • После разложения, если n > 1, значит, оно простое и его тоже добавляем в список.

Проверяем работу функции

print(f(12)) # вывод [2, 2, 3]

print(f(424)) # вывод [2, 2, 2, 53]

print(f(6889)) # вывод [83, 83]

print(f(17)) # вывод [17]

Решаем задачу

p = 0  # Счётчик найденных чисел

x = 6_651_220 + 1  # Начинаем с числа после 6 651 220

while p != 5:

    y = f(x) # Получаем список множителей для числа x

    if len(y) == 2:  # Если у числа x ровно два простых множителя

        # Проверяем, что в каждом множителе ровно одна цифра "2"

        if str(y[0]).count('2') == 1 and str(y[1]).count('2') == 1:

            print(x, max(y))  # Выводим число и наибольший множитель

            p += 1

    x += 1  # Переходим к следующему числу

Вывод:

6651241 2579

6651262 3325631

6651286 3325643

6651314 3325657

6651347 289189

03.01.2025

Идет невисокосный год. Сколько дней до Нового года?

 Задача. Пусть идет невисокосный год. Сколько дней до Нового года? 

Сохраним количество дней в каждом месяце в списке days.

Применим срезы по-новогоднему :)

Программа на Python

print('Год не високосный. Сколько дней до Нового года? Введите текущие')

m = int(input('месяц: '))

d = int(input('день: '))

days = [31,28,31,30,31,30,31,31,30,31,30,31]

print('До Нового года: ',sum(days[m-1:])- d + 1,' дн.')

Еще бы выводить сообщение об ошибочных данных, если пользователь введет не то, что нужно (допишем еще)

Запуск на текущий момент 

Год не високосный. Сколько дней до Нового года? Введите текущие

месяц: 1

день: 3

До Нового года:  363  дн.

04.11.2024

Срезы строк в Питоне

Для решения задач частенько требуются строки и умение их обрабатывать. В этой публикации покажем некоторые примеры работы со строками с использованием срезов.

Строка в Питоне

Последовательность символов, заключенная в апострофы 'HELLO'

s = 'HELLO'

Нумерация символов в строке ведется с 0.

Обращение к символу строки

s = 'HELLO'

s[0] # символ 'H'

s[1] # символ 'E'

s[-1] #последний символ 'O'

s[-2] #предпоследний символ 'L'

Срезы строк (части строки) 

строка[нач_поз: кон_поз: шаг] # конечная позиция не включается

s = '0123456789'

a = s[0:9] # a = '012345678'

a = s[1:] # a =  '123456789'  если конечную позицию опускаем, то берется срез до конца строки

a = s[:7] # a = '0123456'  если начальную позицию опускаем, то берется срез от начала строки

a = s[1:8:2] # a = '1357'

a = [::-1] # a = '9876543210' берем всю строку с шагом -1, переворачиваем строку

Задача. Вводится натуральное число. Записать это число в двоичной системе счисления, перевернуть и отбросить ведущие нули.

Пример:

N = 4410 = 1011002

Перевернутая двоичная запись: 001101

Двоичная запись без ведущих нулей: 1101

Как будем решать задачу

  1. Введем число n
  2. Переведем число n  в двоичную систему функцией bin(), получим строку s
    s = bin(n)
    для n = 44 получим s = '0b101100'
  3. Возьмем срез s[2:], избавимся от первых двух знаков '0b' 
    s = s[2:]
  4. Перевернем запись срезом s[::-1]
  5. Найдем в перевернутой строке позицию первой единицы методом s.find('1')
    pos = s.find('1')
  6. Возьмем срез с найденной позиции до конца строки
    s = s[pos:]

Программа решения задачи на языке Python

n = int(input('Введи натуральное число: '))

s = bin(n)

s = s[2:]

s = s[::-1]

pos = s.find('1')

s = s[pos:]

print(s)

Результат запуска программы

Введи натуральное число: 100

10011

Покороче

s = bin(n)[2:][::-1]

s = s[s.find('1'):]

25.10.2024

Программа Калькулятор на Паскале

Давненько ничего не было о Паскале. Напишем программу, которая выполняет над двумя числами следующие операции:

*

 / 

^  (возведение в степень)

Программа Калькулятор на языке Паскаль

var a, b, r: real;

    p,mes,s1,s2:string;

begin

  mes:='1';  s1:='';  s2:='';

  print('==Программа калькулятор=='+NewLine+' Допустимые операции:'+NewLine+' +'+NewLine+' -'+NewLine+' *'+NewLine+' /'+NewLine+' ^'+NewLine);

  print('Введите первое число:');

  readln(a);

  print(' Введите операцию:');

  readln(p);

  print(' Введите второе число:');

  readln(b);

  if p.length=1 then

  case p of

  '+': r:=a+b;

  '-': r:=a-b;

  '*': r:=a*b;

  '/': r:=a/b;

  '^': r:=a**b;

  else mes:='Введена незнакомая операция';

  end

  else mes:='Введена незнакомая операция';

  if b<0 then begin s1:='('; s2:=')';end;

  if mes='1' then print(' ',a,p,s1,b,s2,'=',r)

             else print(mes);

end.

Результат запуска программы



В этой программе применили оператор NewLine для многострочного вывода, также применили оператор выбора case и приемы работы со строками (склеивание операцией + и функцию length для вычисления длины строки).