Условие: № 7852 Danov2304 (Уровень: Базовый)
• Статья подготовлена командой itpy, подписывайтесь на наш телеграм канал!
Исполнитель Симпли преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:
1.Прибавить 1
2. Прибавить 2
3. Умножить на 3
Программа для исполнителя Симпли – это последовательность команд. Сколько существует программ, для которых при исходном числе 8 результатом является число 32 и при этом траектория вычислений содержит число 16 и не содержит простые числа?
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))
Комментарии к первому решению:
- def Prime(x): - создаём функцию Prime с параметром x.
- for j in range(2, x): - пробегаем цикл, перебирая значения переменной j от 2 до x (не включая x).
- if x % j == 0: - проверяем, делится ли x на j без остатка.
- return False - возвращаем значение False, если x имеет делитель отличный от 1 и самого себя.
- return True - возвращаем значение True, если x является простым числом (не имеет делителей, кроме 1 и самого себя).
- def F(a, b): - объявляем функцию F с параметрами a и b.
- if a > b or Prime(a) == True: - проверяем, если a больше b или a является простым числом.
- return 0 - возвращаем значение 0, если выполняется условие из предыдущего шага.
- elif a == b: - проверяем, если a равно b.
- return 1 - возвращаем значение 1, если a равно b.
- else: - в противном случае (если ни одно из предыдущих условий не выполняется).
- return F(a+1, b) + F(a+2, b) + F(a*3, b) - рекурсивно вызываем функцию F с разными значениями a и b и возвращаем сумму результатов.
- print(F(8, 16) * F(16, 32)) - выводим результат умножения двух вызовов функции F.
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))
Комментарии ко второму решению:
- def Prime(x): - объявляем функцию Prime с параметром x.
- for j in range(2, x): - начинаем цикл, перебирая значения переменной j от 2 до x (не включая x).
- if x % j == 0: - проверяем, делится ли x на j без остатка.
- return False - возвращаем значение False, если x имеет делитель отличный от 1 и самого себя.
- return True - возвращаем значение True, если x является простым числом (не имеет делителей, кроме 1 и самого себя).
- def F(a, b): - объявляем функцию F с параметрами a и b.
- if a >= b or Prime(a) == True: - проверяем, если a больше или равно b или a является простым числом.
- return a == b - возвращаем значение True, если a равно b, иначе возвращаем False.
- return F(a+1, b) + F(a+2, b) + F(a*3, b) - рекурсивно вызываем функцию F с разными значениями a и b и возвращаем сумму результатов.
- print(F(8, 16) * F(16, 32)) - выводим результат умножения двух вызовов функции F.