/// <summary> /// Умножение полиномов /// </summary> /// <param name="firstNumber"> Первый полином </param> /// <param name="secondNumber"> Второй полином </param> /// <returns> Возвращает умножение двух полиномов </returns> private static uint Multy(uint firstNumber, uint secondNumber) { int numberBinaryLengthFirstElement = WorkWithBits.FindBinaryLength(firstNumber); int numberBinaryLengthSecondElement = WorkWithBits.FindBinaryLength(secondNumber); uint answer = 0; uint tmpConjunction; uint tmpXor; for (int i = 0; i < numberBinaryLengthFirstElement; i++) { for (int j = 0; j < numberBinaryLengthSecondElement; j++) { tmpConjunction = (uint)(WorkWithBits.PrintBit(firstNumber, i) & WorkWithBits.PrintBit(secondNumber, j)); tmpXor = (uint)WorkWithBits.PrintBit(answer, i + j) ^ tmpConjunction; answer = (uint)WorkWithBits.SetOrRemove(answer, tmpXor, i + j); } } return(answer); }
/// <summary> /// Выводит полином в подобающем пользовательском виде /// (степень x это нумерация бита справа налево) /// </summary> /// <param name="number"> Полином </param> /// <returns> Возвращает строку в виде привычного полинома </returns> private static string PrintGfElement(uint number) { int numberBinaryLength = WorkWithBits.FindBinaryLength(number); StringBuilder answer = new StringBuilder(); for (int i = numberBinaryLength; i >= 0; i--) { if (WorkWithBits.PrintBit(number, i) == 1) { if (i == 0) { answer.Append(1).Append(" + "); break; } answer.Append("x^").Append(i).Append(" + "); } } answer.Remove(answer.Length - 3, 3); return(answer.ToString()); }