для n в пределах 100-200 считает вроде правильно, и достаточно быстро. Что до больших значений n, мне не хватило терпения. Ненормально это, успеть попить чаю в ожидании конца работы программы в 8 строк.
При желании можно использовать как стресс-тест ЦПУ
1. b = 6
2. b = 6
Объяснение:
1.
Команды:
1. прибавь 1 (+ 1)
2. умножь на b (* b)
(b - неизвестное натуральное число; b ≥ 2)
Программа 11221 переводит число 4 в число 217
Распишем программу по действиям:
1) 4 + 1 = 5
2) 5 + 1 = 6
3) 6 * b = 6b
4) 6b * b = 6b^2
5) 6b^2 + 1 = 6b^2 + 1
Составим уравнение и решим его:
6b^2 + 1 = 217
6b^2 = 216
b^2 = 36
b = 6 (берём это значение, т.к. b ≥ 2)
Проверка:
1) 4 + 1 = 5
2) 5 + 1 = 6
3) 6 * 6 = 36
4) 36 * 6 = 216
5) 216 + 1 = 217
2.
Команды:
1. прибавь 2 (+ 2)
2. умножь на b (* b)
(b - неизвестное натуральное число; b ≥ 2)
Программа 12121 переводит число 3 в число 194
Распишем программу по действиям:
1) 3 + 2 = 5
2) 5 * b = 5b
3) 5b + 2 = 5b + 2
4) (5b + 2) * b = 5b^2 + 2b
5) 5b^2 + 2b + 2 = 5b^2 + 2b + 2
Составим уравнение и решим его:
5b^2 + 2b + 2 = 194
5b^2 + 2b - 192 = 0
D = b^2 - 4ac = 2^2 - 4 * 5 * (-192) = 4 + 3840 = 3844
b = (-b + корень квадратный из (D)) / 2a = (-2 + корень квадратный из (3844)) / (2 * 5) = 60 / 10 = 6 (берём это значение, т.к. b ≥ 2)
Проверка:
1) 3 + 2 = 5
2) 5 * 6 = 30
3) 30 + 2 = 32
4) 32 * 6 = 192
5) 192 + 2 = 194
--- Python 3.8.3 ---
n = int(input('n: \n'))
counter = 0
for coin1 in range(0, n+ 1):
for coin2 in range(0, (n // 2) + 1):
for coin5 in range(0, (n // 5) + 1):
for coin10 in range(0, (n // 10) + 1):
if coin1 * 1 + coin2 * 2 + coin5 * 5 + coin10 * 10 == n: counter += 1
print(counter)
для n в пределах 100-200 считает вроде правильно, и достаточно быстро. Что до больших значений n, мне не хватило терпения. Ненормально это, успеть попить чаю в ожидании конца работы программы в 8 строк.
При желании можно использовать как стресс-тест ЦПУ