Дан ненулевой многочлен с целочисленными коэффициентами и корнями, которые находятся на мнимой и действительной прямой, так что если a
это корень, то так и есть -a
, вернуть другой многочлен с корнями, повернутыми на 90 градусов.
подробности
Полином может быть задан в любом приемлемом формате, например, в виде списка коэффициентов. Условие симметрии, a
являющееся корнем в том и только в том случае, если -a
оно является корнем, также приводит к тому, что повернутый многочлен также имеет действительные целые коэффициенты.
Примеры
Далее полиномы приведены в виде списка коэффициентов мономов в убывающей степени. (то есть константа идет последней). Многочлен x^2-1
имеет корни {1,-1}
. Вращать их путем 90°
умножения на i
(мнимую единицу), поэтому у выходного многочлена должны быть корни {i,-i}
, то есть x^2 + 1
.
Input / Output
[1 0 10 0 -127 0 -460 0 576] [1 0 -10 0 -127 0 460 0 576]
[1 0 -4 0] [1 0 4 0]
[1] [1]
источник
x
, так что мое представление может , строка заменыx
с(i*x)
? Могу ли я отформатировать функцию, которая оценивает полином, так что моя заявка состоит в том, чтобы составить ее с помощью функцииx -> i*x
?Ответы:
Mathematica, 10 байт
Чистая функция, которая принимает функцию от x и подставляет в ix.
Альтернатива только с 7 байтами, но не совсем уверен, считается ли это. Чистая функция, которая принимает чистую функцию и возвращает функцию x.
источник
#
переменную и имеет&
в конце.Желе , 5 байт
Попробуйте онлайн!
Как это работает
Умножает первый элемент на
1
, третий элемент на-1
и т. Д.Доказательство алгоритма
Пусть полином будет
f(x)
.Поскольку нам гарантировано, что если
x
корень, то так оно и есть-x
, поэтомуf
должно быть четным, что означает, что его коэффициент для нечетных степеней должен быть0
.Теперь, вращение корней по
90°
существуf(ix)
.Разложение и сравнение коэффициентов доказывает алгоритм.
источник
ı*Ċ
очень хорош, вы должны это объяснить :)JavaScript (ES6), 25 байт
Исходный многочлен имеет решения вида,
x = ±a
где лежит на действительной или мнимой линии. За исключением случаев, когдаa = 0
(в этом случаеx
это фактор многочлена), это означает, чтоx² - a²
это фактор многочлена (что означает, что альтернативные члены всегда равны нулю). Теперь, когда мы вращаем корни, коэффициент меняется наx² + a²
. Поскольку все факторы изменяются одновременно, третий член многочлена, который представляет собой сумму всех-a²
членов, знак изменения, пятый член, который является суммой произведений пар-a²
членов, сохраняет один и тот же знак и т. Д. чередуя каждый второй термин.источник
Октава , 27 байт
Попробуйте онлайн!
Это непосредственно относится к определению: вычислить корни, умножить на
j
, преобразовать обратно из корней в полином. Окончательное округление необходимо из-за числовых ошибок с плавающей точкой.источник
Python 3 , 42 байта
Попробуйте онлайн!
источник
СИЛОС ,
7166 байтПопробуйте онлайн!
Я понятия не имею, что волшебница @Leaky Nun сделала здесь, чтобы сэкономить 5 байт.Мне потребовалась секунда, чтобы понять, но второй бит C будет чередоваться, как мы хотим. Поэтому @Leaky Nun воспользовалась этим, чтобы сохранить нужные нам биты.
источник
TI-Basic, 20 байтов
Если хранится в
prgmA
, запустить с:seq(
просто должен был быть один * команда, которая не поддерживает комплексные числа. :)*: Преувеличение
источник
Casio-Basic, 8 байт
Безымянная функция, используя подход Mathematica Яна Миллера. Необходимо использовать мнимый 𝑖 с клавиатуры Math2 (считается как 2 байта, код символа 769), а полином должен быть введен как уравнение
x
.7 байт для кода, 1 байт для указания
n
в качестве параметра.Объяснение : принимает уравнение
n
, то просто заменяет все экземплярыx
с𝑖x
.источник
Пари / ГП , 16 байт
Попробуйте онлайн!
источник
Stax , 5 байт
Запускать и отлаживать онлайн!
Порт Желе ответ.
Использует представление ASCII для объяснения:
Если могут быть начальные нули, их нужно сначала обрезать, и это можно сделать за счет другого байта.
источник