Beispiel #1
0
        /// <summary>
        /// Умножение натуральных чисел
        /// </summary>
        /// <param name="A">Первый множитель</param>
        /// <param name="B">Второй мнжитель</param>
        /// <returns>Перемноженные числа</returns>
        public static Natural Run(Natural A, Natural B)
        {
            Natural ret = new Natural(new int[A.Clear().Length + B.Clear().Length]);

            for (int i = 0; i < B.Length; i++)
            {
                ret = N_4.Run(ret, N_7.Run(N_6.Run(A, B[i]), i));
            }
            return(ret.Clear());
        }
Beispiel #2
0
        /// <summary>
        /// Функция находит производную многочлена
        /// </summary>
        /// <param name="polynom"> многочлен</param>
        /// <returns>Производная</returns>
        public static Polynomial Run(Polynomial polynom)
        {
            Polynomial Pol = new Polynomial(polynom.Values);                                        //Создается новая переменная полином

            for (int i = 0; i < polynom.Values.Length - 1; ++i)                                     // Цикл для перенесения коэфицентов в новую переменную(После дифференциирования)
            {
                Pol.Values[i] = new Rational(N_6.Run(Z_5.Run(Pol.Values[i + 1].Numerator), i + 1)); // Коэффицент умножается на степень и записывается в предыдущий элемент
            }
            Pol.Values[polynom.Values.Length - 1] = new Rational(N_6.Run(Z_5.Run(Pol.Values[0].Numerator), 0));
            Pol.Clear();// очищаем от лишних нулей
            return(Pol);
        }
Beispiel #3
0
        /// <summary>
        /// Вычисление первой цифры деления и умножение ее на 10^k, где k - ее разряд (второе число не меньше первого)
        /// </summary>
        /// <param name="n1">Первое натуральное число</param>
        /// <param name="n2">Второе натуральное число</param>
        /// <returns>Будет возвращен результат вычисления первой цифры деления и умноженной на 10^k, где k - ее разряд</returns>
        public static Natural Run(Natural n1, Natural n2)
        {
            n1.Clear(); n2.Clear();

            if (N_1.Run(n1, n2) == 2)
            {
                throw new Exception();                                                  // Если первое число меньше второго, то ошибка
            }
            Natural temp = new Natural(new int[1]);
            int     k    = 0;

            do
            {
                if (temp.Length == k)
                {
                    temp = new Natural(new int[temp.Length + 1]);                       // Если длинна передаваемого числа болььше длинны массива, увеличить его на 1
                }
                for (int p = 0; p <= k; p++)                                            // Передача числа по разрядно из входящего во временный
                {
                    temp.Value[temp.Length - p - 1] = n1.Value[n1.Length - p - 1];
                }

                k++;
            } while (N_1.Run(temp, n2) == 2);

            int i = 1;

            while (N_1.Run(N_6.Run(n2, ++i), temp) != 1)
            {
                ;                                                                       // Вычисление первой цифры от деления чисел
            }
            Natural result = new Natural(new int[n1.Length - k + 1]);

            result[result.Length - 1] = i - 1;

            return(result);
        }