16.01 Одна функция
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
—– целое неотрицательное число, задан следующими
соотношениями:
,
,
,
, при
Вычислите минимальное , при котором сумма цифр
будет кратна
, а результат выполнения функции
будет иметь в своем составе более двух цифр
.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции используем
условный оператор
, чтобы задать ветвление. Если
, то
, если
, то
, если
, то
, если
, то
. Если
, то
. Нужно перебрать
, вычислить
и проверить: сумма цифр
кратна
, а само
содержит более двух цифр
. Найти минимальное
,
удовлетворяющее этим условиям.
def f(n): # База: F(1)=1, F(2)=2, F(3)=3 if n < 4: return n # Отдельная база для n = 4: if n == 4: return 3 # Рекурсия: return f(n - 4) + f(n - 3) + n # Поиск минимального n, удовлетворяющего условиям for n in range(1, 1000): val = f(n) # Подсчёт суммы цифр и количества цифр "7" summa, count_7 = 0, 0 while val > 0: # Суммируем цифры summa += val % 10 # Если эта цифра равна 7, то выражение # прибавит 1 к count_7 count_7 += val % 10 == 7 val //= 10 # Проверка условий: сумма кратна 13 и более двух семёрок if count_7 > 2 and summa % 13 == 0: print(n) break
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
,
,
,
, при
и
кратном 3
, при
и
некратном 3
Вычислите минимальное , при котором у
в 16 системе счисления последняя цифра равна F, а также при котором
сумма цифр
будет кратна 21, а результат выполнения функции
будет иметь в своем составе более четырех
цифр 2.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции
используем условный оператор
, чтобы задать ветвление:
при
; при
и
:
; при
и
:
. Перебираем
и для каждого считаем
; проверяем три условия:
(в hex оканчивается на
), сумма цифр
кратна
, а в десятичной
записи
более четырёх цифр "2". Минимальное
, удовлетворяющее всем трём проверкам, и есть
ответ.
def f(n): # База if n in [1, 2, 3, 4]: return n # Ветка для кратных 3 if n > 4 and n % 3 == 0: return n + f(n // 3) # Ветка для некратных 3 if n > 4 and n % 3 != 0: return n ** 3 - f(n - 1) + n # Вычисляет сумму цифр def digit_sum(n): s, total = n, 0 while s > 0: total += s % 10 s //= 10 return total # Перебор n for i in range(1, 1000000): val = f(i) # Если сумма цифр кратна 21, больше четырёх цифр "2" и оканчивается на "F" if digit_sum(val) % 21 == 0 and str(val).count("2") > 4 and i % 16 == 15: print(i) break
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
– целое неотрицательное число, задан следующими
соотношениями:
при
если
и
кратно 3
в остальных случаях
Сколько существует значений n на отрезке [1, 1500], для которых сумма цифр значения функции F(n) является простым числом?
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с
другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри
функции используем условный оператор
, чтобы задать ветвление:
при
; если
и
, то
; иначе
. Перебираем все
,
для каждого вычисляем
, находим сумму его десятичных цифр
, проверяем, является ли
простым числом, и считаем количество таких
. Для ускорения вычислений удобно кэшировать значения
.
from functools import lru_cache # Кэширование результатов для оптимизации @lru_cache(None) def f(n): # База рекурсии if n <= 1: return 1 # При n > 1 и n кратно 3 elif n > 1 and n % 3 == 0: return f(n - 1) + f(n - 2) + n # Иначе else: return f(n - 2) + 2 # Функция для вычисления суммы цифр def summa(n): dig_sum = 0 while n > 0: dig_sum += (n % 10) n //= 10 return dig_sum # Проверка на простоту def is_prime(n): if n < 2: return False # Перебираем до корня for j in range(2, int(n ** 0.5) + 1): # Если хоть один делитель есть, то число простое if n % j == 0: return False return True ans = 0 for i in range(1, 1500 + 1): # Если сумма цифр простая if is_prime(summa(f(i))): # То обновляем счётчик ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
(Статград) Алгоритм вычисления значения функции , где
– целое неотрицательное число, задан следующими
соотношениями:
если
и
нечётное
в остальных случаях
Определите количество значений на отрезке [1, 1000000000], для которых
Если внимательно посмотреть на перебор до 1000 например, то можно заметить, что у подходящих чисел ровно три единицы в 2 системе счисления. Значит эта рекурсия подсчитывает количество единиц в 2-сс.
Также мы знаем, что единицы в 2-сс появляются так: 2 умножаем на какую-то степень n и получаем единичку.
Например число 7: . И в 2-сс выглядит как
. Как раз три единицы.
Также, чтобы получить единицы на трех разных местах мы должны возводить двойки в разные степени и складывать эти числа (как мы уже выяснили на числе 7).
ans = 0 for i in range(31): for j in range(i + 1, 31): for k in range(j + 1, 31): # Строим число с единицами в позициях i, j, k s = 2 ** i + 2 ** j + 2 ** k # Проверяем попадание в диапазон if 1 <= s <= 10 ** 9: ans += 1 print(ans)
Также можно увидеть, что ответ равен .
Все потому что больше миллиарда, но если поставить 3 первые единицы на позициях в 2-сс и остальные нули, то
получим число меньше миллиарда.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— натуральное число, задан следующими соотношениями:
при
при
и
— четное
при
и
— нечетное
Чему равно значение функции В ответе запишите только натуральное число.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции
используем условный оператор
, чтобы задать ветвление:
при
; если
и
чётное, то
; иначе
. Вычисляем
вызовом
функции.
def f(n): # Если n меньше 3 if n < 3: return 2 # Если n чётное if n % 2 == 0: return 2 * f(n - 2) + f(n - 1) + 2 # Если n нечётное return 2 * f(n - 1) + f(n - 2) - 2 print(f(20))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
, если
и при этом
чётно;
, если
нечётно.
Сколько существует таких чисел , что
и
?
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции используем
условный оператор
, чтобы задать ветвление:
; если
и
чётно, то
; если
нечётно,
то
). Перебираем все
из диапазона
, вычисляем
и подсчитываем, сколько раз
результат равен 8.
def f(n): # Базовый случай: if n == 0: return 0 # Если число положительное и чётное if (n > 0) and (n % 2 == 0): return f(n // 2) # Если число нечётное if n % 2 != 0: return 1 + f(n - 1) ans = 0 # Перебор всех чисел от 1 до 500 for n in range(1, 501): # Если значение функции равно 8, увеличиваем счётчик if f(n) == 8: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
, если
и при этом
чётно;
, если
нечётно.
Сколько существует таких чисел , что
и
?
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции используем
условный оператор
, чтобы задать ветвление:
; если
и
чётно, то
; если
нечётно,
то
. Перебираем все
из диапазона
, вычисляем
и подсчитываем, сколько раз
результат равен
.
def f(n): # Базовый случай при n = 0: if n == 0: return 0 # Если число положительное и чётное if (n > 0) and (n % 2 == 0): return f(n // 2) # Если число нечётное if n % 2 != 0: return 1 + f(n - 1) ans = 0 # Перебор всех n от 1 до 900 for n in range(1, 901): # Если F(n) равно 9, увеличиваем счётчик if f(n) == 9: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции чисел Фибоначчи где
задан следующими соотношениями:
Чему равно значение функции F(8)?
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции
используем условный оператор
, чтобы задать ветвление:
,
, для
выполняется
. Необходимо вычислить F(8) вызовом функции.
def f(n): # Базовый случай для n = 1, n = 2: if n == 1 or n == 2: return 1 # Рекурсивный случай: return f(n - 1) + f(n - 2) print(f(8))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
задан следующими соотношениями:
Чему равно значение функции ?
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции
используем условный оператор
, чтобы задать ветвление:
, для
выполняется
. Необходимо вычислить
вызовом функции.
def f(n): # Базовый случай: F(1) = 1 if n == 1: return 1 # Базовый случай: F(2) = 2 if n == 2: return 2 # Рекурсивный случай: return f(n - 1) * f(n - 2) * n print(f(5))
Ошибка.
Попробуйте повторить позже
Существует алгоритм, позволяющий возводить число в степень
не за
операций, а за
. Он называется
бинарным алгоритмом возведения в степень.
Алгоритм вычисления значения функции , где
— натуральные числа, задан следующими
соотношениями:
, если
нечетное
, если
четное
Чему равно значение выражения ?
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с
другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри
функции используем условный оператор
, чтобы задать ветвление. Функция
реализует быстрое
возведение в степень (бинарный алгоритм):
; если
нечётно, то
; если x
чётно, то
. Требуется вычислить сумму
на промежутке
: для
каждого
считаем
через рекурсивную функцию и накапливаем сумму, в конце берём остаток по модулю
.
def f(a, x): # База: if x == 1: return a # Нечётная степень: a ** x = a * (a ** (x-1)) if x % 2 != 0: return a * f(a, x - 1) # Чётная степень: a ** x = (a ** (x/2))**2 b = f(a, x // 2) return b * b ans = 0 # Суммируем i ** i для i от 2 до 10000 for i in range(2, 10000 + 1): ans += f(i, i) # Выводим сумму по модулю 10000 print(ans % 10000)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— натуральное число, задан следующим образом:
В ответе запишите значение от .
Ключевое замечание в этой задаче следующее: . Заметить это можно по-разному.
Первый способ: заметим что это значение дискретной производной многочлена
, а значит так как
, функция
действительно для всех целых чисел в качестве результата возвращает
.
Второй способ: давайте выведем первые значений функции и заметим закономерность. После этого докажем по
индукции своё предположение.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
- натуральное число, задан следующим образом:
при таких x, которые не делятся нацело на
при таких x, которые делятся нацело на
Вычислите
Заметим, что терминальными аргументами, то есть такими, что функции сразу же вернет ответ, являются числа делящиеся
на . Поэтому достаточно лишь найти ближайшее больше либо равное первоначального аргумента такое значение. Для
числа
таковым является
, а ответ 3.
Более того можно заметить, что
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
– натуральное число, задан следующими соотношениями:
, при
Чему равно значение функции ?
В ответе запишите только натуральное число.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри
функции используем условный оператор
, чтобы задать ветвление:
,
, а для
—
. Вычислим значение
вызовом функции.
def f(n): # Базовый случай для n = 1: if n == 1: return 1 # Базовый случай для n = 2: elif n == 2: return 4 # Рекурсивный случай: elif n > 2: return f(n - 1) * (n - 1) + f(n - 2) * (n - 2) print(f(5))
Решение руками
Последовательно находим:
,
,
.
Ошибка.
Попробуйте повторить позже
Последовательность чисел задается рекуррентным соотношением:
, при
, где
– натуральное число.
Чему равно ?
В ответе запишите только натуральное число.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции
используем условный оператор
, чтобы задать ветвление:
,
,
, а для
:
. Вычислим значение
вызовом функции.
def f(n): # Базовые случаи для n = 1, n = 2 и n = 3: if n == 1 or n == 2 or n == 3: return 1 else: # Рекурсивное вычисление: return f(n - 3) + f(n - 1) print(f(12))
Решение «руками»
Последовательно находим:
,
,
,
,
,
,
,
,
.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
– натуральное число, задан следующими соотношениями:
, при
Чему равно значение функции F(6)?
В ответе запишите только натуральное число.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри
функции используем условный оператор
, чтобы задать ветвление:
;
; при
:
. Пропишем функцию по условию и найдем значение
вызовом
функции.
def f(n): # Базовые случаи: F(1) и F(2) равны 1 if n == 1 or n == 2: return 1 else: # Рекуррентная формула: return f(n - 1) * n * n - f(n - 2) print(f(6))
Решение «руками»:
Последовательно находим:
,
,
,
.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
– натуральное число, задан следующими соотношениями:
, при
Чему равно значение функции F(7)?
В ответе запишите только число.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри
функции используем условный оператор
, чтобы задать ветвление:
;
;
:
. Пропишем функцию по условию и найдем значение
вызовом
функции.
def f(n): # Базовый случай для n = 1: if n == 1: return 1 # Второй базовый случай для n = 2: if n == 2: return 2 # Рекуррентная формула: return (f(n - 1) - f(n - 2)) * n - 15 print(f(7))
Решение «руками»:
Последовательно находим:
,
,
,
,
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
- натуральное число, задан следующими соотношениями:
;
;
при
.
Чему равно значение функции ?
В ответе запишите только натуральное число.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри
функции используем условный оператор
, чтобы задать ветвление:
;
; при
:
. Пропишем функцию по условию и найдем значение
вызовом
функции.
def f(n): # Базовые случаи для n = 1 и n = 2 if n == 1: return 5 if n == 2: return 5 # Рекуррентный случай return 5 * f(n - 1) - 4 * f(n - 2) print(f(13))
Решение руками:
Последовательно находим:
;
;
;
;
;
;
;
;
;
;
;
;
;
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
,
– натуральные числа, задан следующими
соотношениями:
, при
или
, при
и
Чему равно значение функции ? В ответе запишите только натуральное число.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции
используем условный оператор
, чтобы задать ветвление: базовый случай: при
или
—
;
рекурсивный случай (для
и
):
.
Нужно вычислить
. Реализуем рекурсивную функцию строго по определению и вызовем её для
.
def f(n, m): # База: если n <= 2 или m <= 5 if n <= 2 or m <= 5: return 2 # Рекуррентный шаг по формуле из условия return f(n - 3, m) + f(n, m - 2) * m + f(n - 5, m - 5) * n print(f(11, 16))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
,
,
,при
Чему будет равно значение, вычисленное при выполнении вызова ?
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции
используем условный оператор
, чтобы задать ветвление:
,
,
, при
:
. Выведем ответ вызовом функции
Рекурсивное решение
def f(n): # База для n = 1, n = 2 и n = 3 if n == 1: return 0 if n == 2 or n == 3: return 1 # Рекуррентная формула return f(n - 1) + n * n + f(n - 2) print(f(19))
Динамическое решение
Для динамического решения создадим список, где каждому i-тому элементу будет соответствовать . Заполним
список по правилам из условия и выведем ответ вызовом 19-го элемента.
# Массив для хранения значений F f = [0] * (19 + 1) # База для n = 1, n = 2 и n = 3 f[1] = 0 f[2] = 1 f[3] = 1 # Рекуррентно вычисляем for i in range(4, 19 + 1): f[i] = f[i - 1] + i * i + f[i - 2] print(f[19])
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, а «/» — целочисленное деление,
задан следующими соотношениями:
,
,
, если
и четно
, если
и нечетно
Чему будет равно значение, вычисленное при выполнении вызова ?
Примечание: знак // означает целочисленное деление.
Рекурсивное решение
В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими
аргументами. Для реализации создаём пользовательскую функцию в Python с помощью . Внутри функции
используем условный оператор
, чтобы задать ветвление:
; если
и
чётное, то
; если n>3 и n нечётное, то
.
Нужно вычислить
. Реализуем рекурсивно по определению и выведем ответ через
вызовом
функции.
def F(n): # База для n = 1, n = 2, n = 3: if n == 1 or n == 2 or n == 3: return 1 # Ветка для чётных n > 3 if n > 3 and n % 2 == 0: return F(n - 1) + F(n - 3) + F(n // 3) # Ветка для нечётных n > 3 if n > 3 and n % 2 != 0: return F(n - 2) + F(n - 1) print(F(30))