def test_low_mod(self): m = ModularSolver(modulus=31,primitive_root=3) numerators = [1, 1, 1, 0, -1, 0, 1] denominators = [1, 2, 6, 1, 30, 1, 42] expected = [m.div(n, d) for n, d in izip(numerators, denominators)] b = Bernoulli(modulus=31, primitive_root=3) actual = list(b.bernoulli(6)) self.assertEqual(expected, actual)
def test_pow(self): m = ModularSolver(31) self.assertEqual(m.pow(2, 5), 1) self.assertEqual(m.pow(2, 31), 2) self.assertEqual(m.pow(2, 33), 8) self.assertEqual(m.pow(10, 13), 10 ** 13 % 31) self.assertEqual(m.pow(13, 10), 13 ** 10 % 31) self.assertEqual(m.pow(2, 40), 2 ** 40 % 31) m = ModularSolver(11) self.assertEqual(m.pow(10, 13), 10 ** 13 % 11) self.assertEqual(m.pow(13, 10), 13 ** 10 % 11)
def test_div(self): m = ModularSolver(31) self.assertEqual(m.div(40, 2), 20) self.assertEqual(m.div(9, 2), 20)