Найти в Дзене

Разбор номера 7852 ЕГЭ по информатике #23

Оглавление

Условие: № 7852 Danov2304 (Уровень: Базовый)
Статья подготовлена командой itpy, подписывайтесь на наш телеграм канал!

Исполнитель Симпли преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:

1.Прибавить 1
2. Прибавить 2
3. Умножить на 3

Программа для исполнителя Симпли – это последовательность команд. Сколько существует программ, для которых при исходном числе 8 результатом является число 32 и при этом траектория вычислений содержит число 16 и не содержит простые числа?

-2
def Prime(x):
for j in range(2, x):
if x % j == 0:
return False
return True

def F(a, b):
if a > b or Prime(a) == True:
return 0
elif a == b:
return 1
else:
return F(a+1, b) + F(a+2, b) + F(a*3, b)

print(F(8, 16) * F(16, 32))

Комментарии к первому решению:

  1. def Prime(x): - создаём функцию Prime с параметром x.
  2. for j in range(2, x): - пробегаем цикл, перебирая значения переменной j от 2 до x (не включая x).
  3. if x % j == 0: - проверяем, делится ли x на j без остатка.
  4. return False - возвращаем значение False, если x имеет делитель отличный от 1 и самого себя.
  5. return True - возвращаем значение True, если x является простым числом (не имеет делителей, кроме 1 и самого себя).
  6. def F(a, b): - объявляем функцию F с параметрами a и b.
  7. if a > b or Prime(a) == True: - проверяем, если a больше b или a является простым числом.
  8. return 0 - возвращаем значение 0, если выполняется условие из предыдущего шага.
  9. elif a == b: - проверяем, если a равно b.
  10. return 1 - возвращаем значение 1, если a равно b.
  11. else: - в противном случае (если ни одно из предыдущих условий не выполняется).
  12. return F(a+1, b) + F(a+2, b) + F(a*3, b) - рекурсивно вызываем функцию F с разными значениями a и b и возвращаем сумму результатов.
  13. print(F(8, 16) * F(16, 32)) - выводим результат умножения двух вызовов функции F.

-3
def Prime(x):
for j in range(2, x):
if x % j == 0:
return False
return True

def F(a, b):
if a >= b or Prime(a) == True:
return a == b
return F(a+1, b) + F(a+2, b) + F(a*3, b)

print(F(8, 16) * F(16, 32))

Комментарии ко второму решению:

  1. def Prime(x): - объявляем функцию Prime с параметром x.
  2. for j in range(2, x): - начинаем цикл, перебирая значения переменной j от 2 до x (не включая x).
  3. if x % j == 0: - проверяем, делится ли x на j без остатка.
  4. return False - возвращаем значение False, если x имеет делитель отличный от 1 и самого себя.
  5. return True - возвращаем значение True, если x является простым числом (не имеет делителей, кроме 1 и самого себя).
  6. def F(a, b): - объявляем функцию F с параметрами a и b.
  7. if a >= b or Prime(a) == True: - проверяем, если a больше или равно b или a является простым числом.
  8. return a == b - возвращаем значение True, если a равно b, иначе возвращаем False.
  9. return F(a+1, b) + F(a+2, b) + F(a*3, b) - рекурсивно вызываем функцию F с разными значениями a и b и возвращаем сумму результатов.
  10. print(F(8, 16) * F(16, 32)) - выводим результат умножения двух вызовов функции F.

Ответ: 40

Читайте нас в телеграмме:

Информатика ЕГЭ | itpy 👨‍💻

Присоединяйся к нашему Телеграм каналу: t.me/informatika_kege_itpy
Присоединяйся к нашему Телеграм каналу: t.me/informatika_kege_itpy