Яой - это зло. И не важно, что это зло занимает кучу гигабайт на моем компе!
Реализовать в виде класса набор подпрограмм для выполнения операций с многочленами от одной переменной: возведение в натуральную степень k и деление с остатком;
Есть ли какой-нибудь алгоритм для этих операций? Для возведения в степень хотела использовать уже реализованную функцию умножения, но не выходит. Может, ее изменить и доработать? Потому что после введения в степень результат мне нужно будет использовать.

умножение

возведение в степень

@темы: Вопрос, C++, Алгоритм

Комментарии
23.11.2013 в 13:27

Миру - мир. А Вам - пломбир!
> Для возведения в степень хотела использовать уже реализованную функцию умножения, но не выходит.
Возведение x в степень n это умножение x самого на себя n раз. Посему, можно реализовать обычным циклом. Если хочется поизвращаться, то можно использовать быстрое возведение или БПФ с треугольником.

> после введения в степень результат мне нужно будет использовать
В таком случае возвращайте результат возведения из метода (return) вместо его вывода. Тогда результат возведения можно будет использовать на месте вызова метода.

> Как поправить положение?
А зачем сохранять промежуточные возведения? 2^4 = 2*2*2*2 = 4*2*2 = 8*2 = 16.

Из приведённого кода мне, например, не очень понятно как выглядит класс многочлена, как пытаетесь использовать указанные функции и какие ошибки получаете при компиляции/запуске.

Очепятки:
– "=" это присваивание, а сравнение "=="
– "<>" это аналог "!=", а побитовый сдвиг выглядит так "<<"

И что означает магическое число 100?
23.11.2013 в 13:41

Яой - это зло. И не важно, что это зло занимает кучу гигабайт на моем компе!
Скептичный циник, из всего поняла, что проглядела опечатки, что можно будет возвратить массив.
И что означает магическое число 100? а почему не 100. Сомневаюсь, что многочлен будет более этого числа. Поэтому и зануляю для дальнейших вычислений до него, чтобы не было "грязи". Хотя признаю, что логичнее сделать до числа равного m.stepen+stepen
А зачем сохранять промежуточные возведения? 2^4 = 2*2*2*2 = 4*2*2 = 8*2 = 16. какие промежуточные? не совсем понятно.
23.11.2013 в 18:49

Возведение x в степень n это умножение x самого на себя n раз.
Только вот сложность этого алгоритма будет О(k^2*n), где k - степень многочлена, а n - степень, в которую он возводится.
23.11.2013 в 19:49

Яой - это зло. И не важно, что это зло занимает кучу гигабайт на моем компе!
St.Shorh, не совсем понимаю, чем это может помочь. Коэффициенты считать, степень каждый раз. Никак не могу сообразить как все это реализовать. ^^"""
24.11.2013 в 02:42

Миру - мир. А Вам - пломбир!
Марго Ивановна
> а почему не 100. Сомневаюсь, что многочлен будет более этого числа.
Эм, так что всё-таки оно означает? Максимальную степень?

> логичнее сделать до числа равного m.stepen+stepen
Да, логичнее. Для динамических размеров массивов нужно использовать кучу вручную или вектор.

Если уже перегружен оператор умножения многочлена на многочлен и корректно работает, то реализовать возведение в степень можно несколькими способами. Отличаются они математическими алгоритмами и вычислительной сложностью алгоритма: "в лоб" (по определению степени), треугольник Паскаля или через БПФ. Как правильно заметила St.Shorh выше, у первого способа максимальная вычислительная сложность среди указанных: O(k^2*n) против, ЕМНИП, O(n^2) и O(n*log(n,2)) соответственно. Да поправят меня математики здесь присутствующие (:

Для примера, возьмём возведение в степень "в лоб" (просто потому, что писать меньше и проще):