Реализуйте полиномиальное длинное деление, алгоритм, который делит два полинома и получает частное и остаток:
(12x ^ 3 - 5x ^ 2 + 3x - 1) / (x ^ 2 - 5) = 12x - 5 R 63x - 26
В ваших программах вы будете представлять полиномы в виде массива с постоянным членом на хвосте. например, x ^ 5 - 3x ^ 4 + 2x ^ 2 - x + 1 станет [1, -3, 0, 2, -1, 1].
Функция длинного деления, которую вы собираетесь написать, вернет два значения: частное и остаток. Вам не нужно обрабатывать неточности и арифметические ошибки. Не используйте математическую библиотеку для своей работы, однако вы можете сделать так, чтобы ваша функция могла работать с символическими значениями. Самый короткий код выигрывает.
ПРИМЕР: div([12, -5, 3, -1], [1, 0, -5]) == ([12, -5], [63, -26])
code-golf
math
abstract-algebra
polynomials
Мин-Tang
источник
источник
Ответы:
J, 94
например.
Объяснение некоторых фрагментов, учитывая, что a: (12 -5 3 -1) и b: (1 0 -5)
длина:
сделать a и b одинаковый порядок, добавив нули к b:
разделить высшие силы (первые элементы) a, b:
умножьте b на это и вычтите это из a:
повторить n раз b = f (a, b):
источник
Python 2,
260258257255 байтЭто выполняет:
Используйте так:
источник
Хаскелл, 126
Для начала:
Образец использования:
источник
Javascript с лямбдами, 108
Первый аргумент заменяется напоминанием, а второй - результатом.
Пример использования в Firefox:
Извините за ошибку. Уже исправлено.
источник