Швидке піднесення до степеня#2814

Швидке піднесення до степеня

1 секунда
128 мегабайтів
Легка

Дуже часто виникає задача ефективного обчислення x^n для заданих та , де — додатне ціле число.

Наприклад, нехай потрібно обчислити x^{16}. Можна просто почати з і перемножувати його на ще разів. Однак той самий результат можна отримати лише чотирма множеннями, якщо повторно підносити до квадрату, послідовно обчислюючи x^2, x^4, x^8, x^{16}.

Загалом ту саму ідею можна застосувати для будь-якого значення наступним чином. Запишіть у двійковій системі (відкинувши початкові нулі). Далі, замініть кожну "1" парою символів SX, кожну "0" — символом S, і видаліть найлівішу пару SX. Отримаємо правило для обчислення x^n, де "S" означає зведення в квадрат, а "X" — множення на . Наприклад, n = 23 у двійковому записі — це 10111. Таким чином, утворюється послідовність SXSSXSXSX. Видаливши початкову пару SX, отримуємо остаточне правило SSXSXSX. Це означає: "піднести у квадрат, піднести у квадрат, помножити на , піднести у квадрат, помножити на , піднести у квадрат і помножити на "; тобто послідовно обчислити x^2, x^4, x^5, x^{10}, x^{11}, x^{22}, x^{23}.

Потрібно побудувати правило для швидкого піднесення до степеня для заданого .

Вхідні дані

Одне додатне ціле число , не більше 2 \cdot 10^9.

Вихідні дані

Виведіть рядок, що представляє правило піднесення до степеня для обчислення x^n.

Приклади

Приклад 1

Loading
Loading