public BinaryGaloisFieldElement Modulo(BinaryGaloisFieldElement x, BinaryGaloisFieldElement y) { Int32 ordX, ordY; ordX = BinaryGaloisFieldElement.Order(x); ordY = BinaryGaloisFieldElement.Order(y); // if x is already of lower order than y, abort if (BinaryGaloisFieldElement.Order(x) < BinaryGaloisFieldElement.Order(y)) { return(x); } // Keep subtracting mod value until we are in a valid range // Perform long division while (ordX >= ordY) { if ((x.Value & (0x1 << ordX)) != 0) { x -= (y << (ordX - ordY)); } ordX--; } return(x); }
public BinaryGaloisFieldElement Divide(BinaryGaloisFieldElement x, BinaryGaloisFieldElement y) { Int32 result = 0x0; Int32 ordX, ordY; ordX = BinaryGaloisFieldElement.Order(x); ordY = BinaryGaloisFieldElement.Order(y); // if x is already of lower order than y, abort if (ordX < ordY) { return((BinaryGaloisFieldElement)0); } // Perform long division while (ordX >= ordY) { if ((x.Value & (0x1 << ordX)) != 0) { result = 0x1 << (ordX - ordY); x -= (y << (ordX - ordY)); } ordX--; } return((BinaryGaloisFieldElement)result); }