Найбільший спільний дільник многочленів#5794

Найбільший спільний дільник многочленів

1 секунда
64 мегабайти
Дуже легка

Вчитель математики пан Мацудайра навчає своїх учнів розкладу та факторизації многочленів. Минулого тижня він доручив учням написати два многочлени (з однією змінною ) і знайти НСД (найбільший спільний дільник) цих многочленів як домашнє завдання, але йому стало нудно перевіряти їхні відповіді вручну. Тому вас просять написати програму для перевірки відповідей.

Розглядаються лише ті многочлени з цілими коефіцієнтами, які називаються цілими многочленами.

Коли дано два цілі многочлени і , цілий многочлен є спільним дільником і , якщо існують деякі цілі многочлени і такі, що A = CX і B = CY.

НСД двох цілих многочленів є спільним дільником, який має найвищий степінь (по ); вам потрібно написати програму, яка обчислює НСД двох многочленів.

Відомо, що НСД двох даних многочленів є унікальним, якщо ігнорувати множник-константу. Тобто, коли і є обидва НСД деяких двох многочленів і , p \times C = q \times D для деяких ненульових цілих чисел і .

Вхідні дані

Вхід складається з кількох наборів даних. Кожен набір даних складається з пари рядків введення, кожен з яких представляє многочлен як вираз, визначений нижче.

  1. Первинний елемент — це змінна x, послідовність цифр – або вираз, укладений у дужки (...). Приклади: x, 99, (x+1).

  2. Фактор — це первинний елемент сам по собі або первинний елемент, за яким слідує показник степеня. Показник степеня складається з символу ^, за яким слідує послідовність цифр –. Приклади: x^05, 1^15, (x+1)^3.

  3. Член складається з одного або кількох прилеглих факторів. Приклади: 4x, (x+1)(x-2), 3(x+1)^2.

  4. Вираз — це один або кілька членів, з'єднаних або +, або -. Крім того, перший член виразу може опціонально починатися зі знака мінус -. Приклади: -x+1, 3(x+1)^2-x(x-1)^2.

Цілі константи, показники степеня, множення (прилеглі), додавання (+) та віднімання/негування (-) мають свої звичайні значення. Послідовність цифр завжди інтерпретується як ціла константа. Наприклад, 99 означає , а не 9 \times 9.

Будь-які підвирази введення, коли повністю розгорнуті та нормалізовані, мають коефіцієнти менші за і степені менші за . Послідовності цифр у показниках степеня представляють ненульові значення.

Усі набори даних розроблені так, щоб стандартний алгоритм з -бітними цілими числами з двійковим доповненням міг вирішити проблему без переповнень.

Кінець введення позначається рядком, що містить крапку.

Вихідні дані

Для кожного набору даних виведіть вираз многочлена НСД в одному рядку у форматі нижче.

c_0 x^{p_0} \pm c_1 x^{p_1} \ldots \pm c_n x^{p_n}

Де c_i і p_i (i = 0, \ldots, n) є додатними цілими числами з p_0 > p_1 > \ldots > p_n, і найбільший спільний дільник \{c_i | i = 0, \ldots, n\} дорівнює .

Додатково:

  1. Коли c_i дорівнює , його слід опустити, якщо відповідний p_i не дорівнює ,

  2. x^0 слід опустити повністю, і

  3. x^1 слід записати як x.

Приклади

Приклад 1

Loading
Loading