public BigGF Div(BigGF b) { var res = new BigGF(_pow.IntValue(), _poly); while (res._num >= b._num) { int pow = res.GetMaxPow() - b.GetMaxPow(); var tmp = Mul(b._poly, pow); var newGF = new BigGF(_pow.IntValue(), tmp); var aaa = res + newGF; res = aaa; } return(res); }
public BigGF Mul(BigGF b) { var first = _poly; var second = b._poly; var res = new SortedDictionary <int, int>(); foreach (var pair1 in first) { foreach (var pair2 in second) { int key = pair1.Key + pair2.Key; int value = pair1.Value * pair2.Value; if (value == 1) { if (!res.ContainsKey(key)) { res.Add(key, 1); } else { res.Remove(key); } } } } var result = new BigGF(_pow.IntValue(), res); if (Math.Pow(2, result.GetMaxPow()) < _pow.IntValue()) { return(result); } else { double aaa = _pow.IntValue(); int ttt = (int)Math.Log(aaa, 2); var tmp = new BigGF(_pow, irreducible_polynomials[ttt - 1]); return(result.Div(tmp)); } }