Яой - это зло. И не важно, что это зло занимает кучу гигабайт на моем компе!
Реализовать в виде класса набор подпрограмм для выполнения операций с многочленами от одной переменной: возведение в натуральную степень k и деление с остатком;
Есть ли какой-нибудь алгоритм для этих операций? Для возведения в степень хотела использовать уже реализованную функцию умножения, но не выходит. Может, ее изменить и доработать? Потому что после введения в степень результат мне нужно будет использовать.
умножение
возведение в степень
Есть ли какой-нибудь алгоритм для этих операций? Для возведения в степень хотела использовать уже реализованную функцию умножения, но не выходит. Может, ее изменить и доработать? Потому что после введения в степень результат мне нужно будет использовать.
умножение
возведение в степень
Возведение x в степень n это умножение x самого на себя n раз. Посему, можно реализовать обычным циклом. Если хочется поизвращаться, то можно использовать быстрое возведение или БПФ с треугольником.
> после введения в степень результат мне нужно будет использовать
В таком случае возвращайте результат возведения из метода (return) вместо его вывода. Тогда результат возведения можно будет использовать на месте вызова метода.
> Как поправить положение?
А зачем сохранять промежуточные возведения? 2^4 = 2*2*2*2 = 4*2*2 = 8*2 = 16.
Из приведённого кода мне, например, не очень понятно как выглядит класс многочлена, как пытаетесь использовать указанные функции и какие ошибки получаете при компиляции/запуске.
Очепятки:
– "=" это присваивание, а сравнение "=="
– "<>" это аналог "!=", а побитовый сдвиг выглядит так "<<"
И что означает магическое число 100?
И что означает магическое число 100? а почему не 100. Сомневаюсь, что многочлен будет более этого числа. Поэтому и зануляю для дальнейших вычислений до него, чтобы не было "грязи". Хотя признаю, что логичнее сделать до числа равного m.stepen+stepen
А зачем сохранять промежуточные возведения? 2^4 = 2*2*2*2 = 4*2*2 = 8*2 = 16. какие промежуточные? не совсем понятно.
Только вот сложность этого алгоритма будет О(k^2*n), где k - степень многочлена, а n - степень, в которую он возводится.
> а почему не 100. Сомневаюсь, что многочлен будет более этого числа.
Эм, так что всё-таки оно означает? Максимальную степень?
> логичнее сделать до числа равного m.stepen+stepen
Да, логичнее. Для динамических размеров массивов нужно использовать кучу вручную или вектор.
Если уже перегружен оператор умножения многочлена на многочлен и корректно работает, то реализовать возведение в степень можно несколькими способами. Отличаются они математическими алгоритмами и вычислительной сложностью алгоритма: "в лоб" (по определению степени), треугольник Паскаля или через БПФ. Как правильно заметила St.Shorh выше, у первого способа максимальная вычислительная сложность среди указанных: O(k^2*n) против, ЕМНИП, O(n^2) и O(n*log(n,2)) соответственно. Да поправят меня математики здесь присутствующие (:
Для примера, возьмём возведение в степень "в лоб" (просто потому, что писать меньше и проще):