Вот вариант без использования встроенных кэшей, только рекурсивная функция и словарь, всё как положено:
def pow(number, power):
powers = {0: 1, 1: number}
def rec(p):
if p in powers:
# уже вычисляли эту степень
return powers[p]
elif p % 2 == 0:
# чётный случай
result = rec(p//2) * rec(p//2)
powers[p] = result
return result
else:
# нечётный случай
result = rec(p-1) * number
powers[p] = result
return result
return rec(power)
print(pow(1.253, 25))
Поделитесь своими знаниями, ответьте на вопрос:
1. Що називають предметною областю БД? 2. Наведіть приклади властивостей об'єкта смартфон. 3. Як позначають об'єкти БД? 4. Як БД поділяються за структурою? 5. Які БД називають фактографічними? 6. Наведіть означення БД. 7. Назвіть основні функції СУБД. 8. Поясніть сутність транзакції.
Такие задания со сложными условиями легче всего решать программой на питоне:
for n in range(1, 10000000): # Грубый перебор
n -= n % 4 # 1. Из числа N вычитается остаток от деления N на 4.
n = bin(n)[2:] # 2. Строится двоичная запись полученного результата. + срез "0b"
n = n + str(n.count('1') % 2) # 3. a)
n = n + str(n.count('1') % 2) # 3. б)
r = int(n, 2) # Перевод в 10 с.с.
if r > 56:
print(r)
break
ответ: 66
Если всё же рассуждать, то опять перебором:
Возьмём, например, число 5 и выполним алгоритм:
1. 5 - 5 % 4 = 4
2. 4 -> 100
3. a) 1001
б) 10010
R = 18, очень мало
Возьмём, например, 14:
1. 12
2. 1100
3. a) 11000
б) 110000
R = 48, маловато, но близко
Возьмём, например, 15:
1. 12
Видим, будет тоже, что и 14
Возьмём, например, 16:
1. 16
2. 10000
3. a) 100001
б) 1000010
R = 66, то, что нам нужно.
ответ: 66