Перемножение полиномов? Необходимо на C# перемножить два полинома вида a0*b^0+a1*b^1+... Могут быть произвольной длины. Хранятся как массив коэффициентов. Сами коэффициенты могут быть от 1 до ulong.MaxValue (больше шарп не позволяет) - целые числа. Так же можно использовать только system и коллекции.
Проблема в том, что если тупо перемножать, возможно переполнение памяти.Как перемножить полиномы без ошибки памяти и какой алгоритм самый быстрый?
P.s.
Это не домашнее задание или курсовая работа!

21 Авг 2019 в 06:07
224 +1
0
Ответы
1

Для перемножения двух полиномов без проблем с переполнением памяти на C#, можно воспользоваться следующим алгоритмом:

Создать массив для хранения результирующего полинома, размер которого равен сумме длин исходных полиномов минус один.

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

После умножения всех членов первого полинома на все члены второго полинома, получим результирующий полином.

Примерный код реализации:

public ulong[] MultiplyPolynomials(ulong[] poly1, ulong[] poly2)
{
int len1 = poly1.Length;
int len2 = poly2.Length;
ulong[] result = new ulong[len1 + len2 - 1];
for (int i = 0; i < len1; i++)
{
for (int j = 0; j < len2; j++)
{
result[i + j] += poly1[i] * poly2[j];
}
}
return result;
}

Этот алгоритм является наиболее простым и эффективным способом перемножения полиномов на C#.

20 Апр 2024 в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир