/// <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); }
/// <summary> /// Инициализирует новое линейное сравнение копией заданного сравнения /// </summary> /// <param name="Other">Сравнение, для которого требуется создать копию</param> public LinearComparison(LinearComparison Other) { M = Other.M; A = Other.A; }