Можете ли вы получить список степеней многочлена? Гран-при Пари

Я работаю с полиномами с одной переменной с коэффициентами +1/-1 (и нулем). Они могут быть очень длинными, а диапазон мощностей может быть довольно большим. Мне было бы удобно рассматривать силы как вектор — есть ли способ сделать это быстро? Я надеялся, что в Пари уже есть команда для этого, но я не вижу ее?

Просто пример, чтобы подтвердить, что я пытаюсь сделать...

Вход:x^10 - x^8 + x^5 - x^2 + x + 1

Желаемый результат: [10, 8, 5, 2, 1, 0]


person Mystery_Jay    schedule 05.11.2019    source источник


Ответы (1)


Вы можете использовать Vecrev для получения полиномиальных коэффициентов. После этого просто перечислите их, чтобы выбрать нулевые позиции ненулевых значений. Вам нужен следующий однострочный:

nonzeros(xs) = Vecrev([x[2]-1 | x <- select(x -> x[1] != 0, vector(#xs, i, [xs[i], i]))])

Теперь вы можете легко получить список полиномиальных степеней:

p = x^10 - x^8 + x^5 - x^2 + x + 1
nonzeros(Vecrev(p))
>> [10, 8, 5, 2, 1, 0]
person Piotr Semenov    schedule 05.11.2019