Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где - целое неотрицательное число, задан следующими соотношениями:
;
, если и четное;
, в остальных случаях.
В данной задаче означает деление нацело.
Определите количество значений на отрезке , для которых .
Решение №1
def build_bin(string, lenght): # Если длина построенного слова совпадает с максимальной длинной if len(string) == lenght: return string.count(’0’) == 3 and int(string, 2) <= 10**9 counter = 0 # Строим новые двоичные числа (прибавляем 0 или 1) if string.count(’0’) < 3: counter += build_bin(string + ’0’, lenght) + \ build_bin(string + ’1’, lenght) # Если дошли до количества равного 3, то прибавляем данное # число (дописываем единицы) if string.count(’0’) == 3: counter += int(string + ’1’ * (lenght - len(string)), 2) <= 10**9 return counter ans = 0 for i in range(4, 31): ans += build_bin(’1’, i) print(ans)
Решение №2
ans = 0 # Будем строить вида "из всех единичек" # Напимер: 1111111 и нужно перебрать три единички # То есть вычесть 3 единички из двоичного числа # Поэтому вычитаем степени двойки for i in range(31): for j in range(i + 1, 31): for k in range(j + 1, 31): for a in range(k + 1, 31): N = 2 ** (a + 1) N -= 1 N = N - 2 ** k - 2 ** j - 2 ** i if 1 <= N <= 10 ** 9: ans += 1 print(ans)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где — целое неотрицательное число, задан следующими соотношениями:
, если целое число
иначе
Чему равно ?
Проанализируем, как изменяются значения на определенных значениях функции с помощью программы
def stepen(n): while n > 1: if n % 2 != 0: return False n //= 2 return True def f(n): if stepen(n): return n else: return f(n - 1) + 2
Заметим, что функция от степеней двойки выводит само число, а для остальных получается значение *степень двойки* + 2. И так до следующей степени двойки.
Число более того, Значит, что
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где — целое неотрицательное число, задан следующими соотношениями:
, при
, если нечетно
иначе
Определите для скольких чисел из отрезка функция вернет значение True?
Если число не будет полной степенью двойки, то при последовательном делении на мы вскоре получим нечетное число (кроме ) и вернем , вернут только степени двойки в данном диапазоне. Эффективно переберем все числа-степени двойки в данном отрезке
k = 0 x = 2 while x <= 100000000: k += 1 x *= 2 print(k)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции F(x, y, z), где x, y, z - натуральные числа, задан следующим образом:
если ,
если , либо , либо
иначе
Вычислите
Заметим, что функция ищет манхэттенское расстояние в 3хмерном простанстве между точками и . Причем работает корректно только если .
Примечание: Манхеттенское расстояние, или расстояние городских кварталов - расстояние между двумя точками в n-мерном пространстве равное сумме модулей разностей их координат. Для 2хмерного пространства можно представить себе уличную планировку города Манхеттен, а именно квадратную сетку, где мы можем ходить только по этой сетке и расстояние между двумя ближайшими пересечениями равно единице.
Можем заметить, что сумма координат минус значение функции от этих координат всегда равно сумме координат точки, до которой мы ищём расстояние
Иными словами здесь инвариантом является .
Отсюда можем выразить
Ответ:
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где – натуральное число, задан следующими соотношениями:
, если
, если .
Чему равно значение выражения ?
Примечание. Факториал числа , который обозначается как , вычисляется по формуле .
Поскольку числа слишком большие, то будем решать аналитикой. Для начала вычислим значения
Замечаем, что в общем виде вычисляется как
Вычислим требуемое и получим ответ.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения , где — целое неотрицательное число, задан следующими соотношениями:
, при или
иначе
Найдите чему равно значение
Что такое Это есть просто число . А значит, нужно найти сумму чисел от 2 до 10000 включительно.
Ошибка.
Попробуйте повторить позже
Известно, что значение , где — целые неотрицательные числа можно выразить через следующим образом:
Найдите чему равно значение .
def f(n): if n == 0 or n == 1: return 1 return f(n-1)*n def C(n, k): if (k == 0 or k == n): return 1 else: return C(n - 1, k - 1) + C(n - 1, k) n, k = map(int, input().split()) print(C(n, k) * f(k))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения , где — целые неотрицательные числа, задан следующими соотношениями:
, при или
Найдите чему равно значение .
def C(n, k): if (k == 0 or k == n): return 1 else: return C(n - 1, k - 1) + C(n - 1, k) n, k = map(int, input().split()) print(C(n, k))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения , где — целое неотрицательное число, задан следующими соотношениями:
, при или
иначе
Найдите чему равно значение
Функция вычисляет факториал, т.е. произведение всех чисел от 1 до n.
То есть
Значит, после деления у нас останется только число 2023.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где задан следующими соотношениями:
, если k - четное
, если k - нечетное
Чему равно значение функции ?
def f(n): if n == 1: return 1 if n % 2 == 0: return f(n - 1) return f(n - 1) + n print(f(10))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где и – целые неотрицательные числа, задан следующими соотношениями:
, если ;
, если и .
Укажите количество таких целых неотрицательных чисел , для которых можно подобрать такое , что .
Если начать подставлять случайные и в функцию, то станет очевидно, что Значит нам нужно найти количество способов разложить число на произведение двух множителей. Тогда ответом будет количество делителей у числа так как для любого делителя найдется целое неотрицательное . Найдем все делители с помошью кода.
def get_divs(number): divs = [] for i in range(1, int(number**0.5) + 1): if number % i == 0: divs.append(i) if i != int(number**0.5): divs.append(number//i) return divs print(len(get_divs(5555555555555)))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где – целое неотрицательное число, задан следующими соотношениями:
Найдите значение
Протестируем функцию на маленьких . Получим Оказалось, что функция рекурсивно находит
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где – целое неотрицательное число, задан следующими соотношениями:
Укажите количество таких чисел из интервала , для которых не делится без остатка на .
Заметим, что функция находит сумму чисел от до Тогда мы можем найти значение функции как Также заметим, что значение функции дает остаток по модулю только тогда, когда дает остаток по модулю и дает остаток в остальных случаях. Для поиска ответа нам нужно посчитать количество чисел с остатком на заданном промежутке. Тогда всего нам подходит числа.
Ошибка.
Попробуйте повторить позже
Обозначим частное от деления натурального числа на натуральное число как , а остаток как . Например, , . Алгоритм вычисления значения функции , где – целое неотрицательное число, задан следующими соотношениями:
Укажите количество таких чисел n из интервала , для которых
Заметим, что функция на самом деле считает сумму цифр числа Значит нужно понять для каких сумма цифр числа больше суммы цифр числа Такое возможно только в случае перехода между разрядами, то есть нам подходят все принадлежащие промежутку и заканчивающиеся на Тогда нам подходит каждое десятое число, всего в промежутке чисел. Итого нам подходит чисел.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где — целое неотрицательное число, а «/» — целочисленное деление, задан следующими соотношениями:
, ,
, если и четно
, если и нечетно
Чему будет равно значение, вычисленное при выполнении вызова ?
Напишем программу:
def F(n): if n == 1 or n == 2 or n == 3: return 1 if n > 3 and n % 2 == 0: return F(n - 1) + F(n - 3) + F(n // 3) if n > 3 and n % 2 != 0: return F(n - 2) + F(n - 1) print(F(30))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где — целое неотрицательное число, задан следующими соотношениями:
, ,
,при
Чему будет равно значение, вычисленное при выполнении вызова ?
Напишем программу:
def F(n): if n == 1: return 0 if n == 2 or n == 3: return 1 if n > 3: return F(n - 1) + n ** 2 + F(n - 2) print(F(19))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где - натуральное число, задан следующим образом:
при таких x, которые не делятся нацело на
при таких x, которые делятся нацело на
Вычислите
Заметим, что терминальными аргументами, то есть такими, что функции сразу же вернет ответ, являются числа делящиеся на . Поэтому достаточно лишь найти ближайшее больше либо равное первоначального аргумента такое значение. Для числа таковым является , а ответ 3.
Более того можно заметить, что
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где — натуральное число, задан следующим образом:
В ответе запишите значение от .
Ключевое замечание в этой задаче следующее: . Заметить это можно по-разному.
Первый способ: заметим что это значение дискретной производной многочлена , а значит так как , функция действительно для всех целых чисел в качестве результата возвращает .
Второй способ: давайте выведем первые значений функции и заметим закономерность. После этого докажем по индукции своё предположение.
Ошибка.
Попробуйте повторить позже
Существует алгоритм, позволяющий возводить число в степень не за операций, а за . Он называется бинарным алгоритмом возведения в степень.
Алгоритм вычисления значения функции , где — натуральные числа, задан следующими соотношениями:
, если нечетное
, если четное
Чему равно значение выражения ?
def f(a, x): if x == 1: return a if x % 2 != 0: return a * f(a, x - 1) b = f(a, x // 2) return b * b ans = 0 for i in range(2, 10000 + 1): ans += f(i, i) print(ans % 10000)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где задан следующими соотношениями:
Чему равно значение функции ?
def f(n): if n == 1: return 1 if n == 2: return 2 return f(n - 1) * f(n - 2) * n print(f(5))