Выбрать соревнование | Задачи | Послать решение | Результаты проверки | Статистика по задачам | Вопросы и ответы | Результаты соревнования | Состояние сервера | Изменить данные | Управление командой | Помощь |
11/04/2021 | Открытые командные соревнования по спортивному программированию "PRIME TIME" ( 8) |
Ограничения: время – 250ms/500ms, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Треугольник Штерна строится следующим образом.
n-я строка содержит 2n-1 элементов
Обозначим значение k-го элемента в n-й строке как S(n,k).
Будем считать, что S(n,k)=0 если k=0 или k=2n.
Тогда
S(1,1)=1
S(n+1,2⋅k)=S(n,k) для n≥1
S(n+1,2⋅k+1)=S(n,k)+S(n,k+1).
Первые 6 строк треугольника Штерна выглядят так:
1
1 1 1
1 1 2 1 2 1 1
1 1 2 1 3 2 3 1 3 2 3 1 2 1 1
1 1 2 1 3 2 3 1 4 3 5 2 5 3 4 1 4 3 5 2 5 3 4 1 3 2 3 1 2 1 1
1 1 2 1 3 2 3 1 4 3 5 2 5 3 4 1 5 4 7 2 7 5 8 3 7 4 5 1 5 4 7 3 8 5 7 2 7 5 8 3 7 4 5 4 3 5 2 5 3 4 1 3 2 3 1 2 1 1
При достаточно большом n S(n+1,k)=S(n,k).
Рассмотрим предельную последовательность B(k)=lim.
Можно доказать, что для любого рационального положительного числа p/q, где gcd(p,q)=1, существует ровно одно k, такое что p/q={B(k)}/{B(k+1)}. Например, 3/5={B(10)}/{B(11)}.
Напишите программу, которая находит заданное рациональное число в последовательности B(k).
Первая строка ввода содержит два взаимно простых целых числа p и q (1 <= p, q <= 200000).
Вывести одно целое число – номер элемента k по модулю 1 000 000 007.
Пример ввода 1
3 5
Пример вывода 1
10
Пример ввода 2
123 67
Пример вывода 2
131197