コード例 #1
0
        /// <summary>
        ///     Осуществляет решение линейного сравнения.
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <param name="m"></param>
        /// <param name="Result"></param>
        /// <param name="GCD"></param>
        /// <returns></returns>
        public static bool Solve(BigInteger a, BigInteger b, BigInteger m, out LinearComparison Result,
                                 BigInteger[] GCD = null)
        {
            //ax=b(mod m)

            Result = null;
            if (GCD == null)
            {
                GCD = AdvancedEuclidsalgorithm.GCD(a, m);
            }
            if (GCD == null)
            {
                return(false);
            }
            if (b % GCD[0] != 0)
            {
                return(false);
            }
            //a*x0=d(mod m)
            BigInteger x_ = GCD[1] * (b / GCD[0]);

            while (x_ >= m / GCD[0])
            {
                x_ -= m / GCD[0];
            }
            while (x_ < 0)
            {
                x_ += m / GCD[0];
            }
            Result = new LinearComparison(x_, m / GCD[0]);
            return(true);
        }
コード例 #2
0
 /// <summary>
 ///     Инициализирует новое линейное сравнение копией заданного сравнения
 /// </summary>
 /// <param name="Other">Сравнение, для которого требуется создать копию</param>
 public LinearComparison(LinearComparison Other)
 {
     M = Other.M;
     A = Other.A;
 }