private GF256Poly buildGenerator(int degree) { if (degree >= cachedGenerators.Count) { GF256Poly lastGenerator = (GF256Poly)cachedGenerators[cachedGenerators.Count - 1]; for (int d = cachedGenerators.Count; d <= degree; d++) { GF256Poly nextGenerator = lastGenerator.multiply(new GF256Poly(field, new int[] { 1, field.exp(d - 1) })); cachedGenerators.Add(nextGenerator); lastGenerator = nextGenerator; } } return((GF256Poly)cachedGenerators[degree]); }