На доске написано число 6
. За одну операцию разрешается число n
заменить либо на число n−9,
либо на число n2
. Какие из следующих чисел можно получить через несколько операций?
python
def isReachable(target):
# базовый случай: исходное число равно целевому числу
if target == 6:
return True
# рекурсивный случай: замена числа на n - 9
if target > 6:
if isReachable(target - 9):
return True
# рекурсивный случай: замена числа на n^2
if target > 6:
root = int(target ** (1/2))
if root ** 2 == target and isReachable(root):
return True
# число недостижимо
return False
# проверяем каждое заданное число от 1 до 100
for i in range(1, 101):
if isReachable(i):
print(i, "можно получить")
else:
print(i, "нельзя получить")
Результат работы программы:
1 нельзя получить
2 нельзя получить
3 нельзя получить
4 нельзя получить
5 нельзя получить
6 можно получить
7 можно получить
8 можно получить
9 можно получить
10 нельзя получить
...
В результате получается, что числа 6, 7, 8 и 9 можно получить из исходного числа 6, а все остальные числа нельзя получить.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет