Exemplo n.º 1
0
 def comb(self, k):
     assert self.n < Mint.MOD
     if k < 0 or k > self.n:
         return Mint(0)
     if k == 0 or k == self.n:
         return Mint(1)
     return self.fact[self.n] * self.ifact[k] * self.ifact[self.n - k]
Exemplo n.º 2
0
 def __init__(self, n):
     self.n = n
     self.fact = [Mint(1)] * (n + 1)
     self.ifact = [Mint(1)] * (n + 1)
     for i in range(1, n + 1):
         self.fact[i] = self.fact[i - 1] * Mint(i)
     self.ifact[n] = self.fact[n].inv()
     for i in range(n, 0, -1):
         self.ifact[i - 1] = self.ifact[i] * Mint(i)
Exemplo n.º 3
0
 def comb(self, n, k):
     assert n < Mint.MOD
     if k < 0 or k > n:
         return Mint(0)
     if k == 0 or k == n:
         return Mint(1)
     numerator = Mint(n-k+1)
     for i in range(n-k+2, n+1):
         numerator *= Mint(i)
     d = Mint(1)
     for i in range(2, k+1):
         d *= Mint(i)
     denominator = d.inv()
     return numerator*denominator
Exemplo n.º 4
0
 def test_sub_2(self):
     a = Mint(self.TEN * 2)
     b = Mint(self.TEN)
     ans = a - b
     exp = self.TEN % self.MOD
     self.assertEqual(exp, ans.x)
Exemplo n.º 5
0
 def test_sub(self):
     a = Mint(4)
     b = Mint(2)
     ans = a - b
     self.assertEqual(2, ans.x)
Exemplo n.º 6
0
 def test_add_2(self):
     a = Mint(self.TEN)
     b = Mint(self.TEN)
     ans = a + b
     exp = (self.TEN % self.MOD + self.TEN % self.MOD) % self.MOD
     self.assertEqual(exp, ans.x)
Exemplo n.º 7
0
 def test_add(self):
     a = Mint(2)
     b = Mint(2)
     ans = a + b
     self.assertEqual(4, ans.x)
     self.assertEqual(2, a.x)
Exemplo n.º 8
0
 def test_pow_2(self):
     a = Mint(self.TEN)
     n = 2
     ans = a**n
     exp = 10**20 % self.MOD
     self.assertEqual(exp, ans.x)
Exemplo n.º 9
0
 def test_pow(self):
     a = Mint(2)
     n = 10
     ans = a**n
     self.assertEqual(2**10, ans.x)
Exemplo n.º 10
0
 def test_isub(self):
     ans = Mint(10)
     ans -= Mint(2)
     self.assertEqual(8, ans.x)
Exemplo n.º 11
0
 def test_iadd_2(self):
     ans = Mint(self.TEN)
     ans += Mint(self.TEN)
     exp = (self.TEN % self.MOD + self.TEN % self.MOD) % self.MOD
     self.assertEqual(exp, ans.x)
Exemplo n.º 12
0
 def test_iadd(self):
     ans = Mint(4)
     ans += Mint(4)
     self.assertEqual(8, ans.x)
Exemplo n.º 13
0
 def test_div_2(self):
     a = Mint(self.TEN * 2)
     b = Mint(self.TEN)
     ans = a // b
     self.assertEqual(2, ans.x)
Exemplo n.º 14
0
 def test_div(self):
     a = Mint(4)
     b = Mint(2)
     ans = a // b
     self.assertEqual(2, ans.x)
Exemplo n.º 15
0
 def test_idiv_2(self):
     ans = Mint(self.TEN)
     ans //= Mint(2)
     self.assertEqual((self.TEN // 2) % self.MOD, ans.x)
Exemplo n.º 16
0
 def test_mul(self):
     a = Mint(4)
     b = Mint(2)
     ans = a * b
     self.assertEqual(8, ans.x)
Exemplo n.º 17
0
 def test_mul_2(self):
     a = Mint(self.TEN)
     b = Mint(self.TEN)
     ans = a * b
     exp = 10**20 % self.MOD
     self.assertEqual(exp, ans.x)
Exemplo n.º 18
0
 def test_isub_2(self):
     ans = Mint(self.TEN * 2)
     ans -= Mint(self.TEN)
     exp = self.TEN % self.MOD
     self.assertEqual(exp, ans.x)
Exemplo n.º 19
0
 def test_init(self):
     ans = Mint(self.TEN)
     self.assertEqual(self.TEN % self.MOD, ans.x)
Exemplo n.º 20
0
 def test_imul(self):
     ans = Mint(10)
     ans *= Mint(2)
     self.assertEqual(20, ans.x)
Exemplo n.º 21
0
 def test_idiv(self):
     ans = Mint(10)
     ans //= Mint(2)
     self.assertEqual(5, ans.x)
Exemplo n.º 22
0
 def test_imul_2(self):
     ans = Mint(self.TEN)
     ans *= Mint(self.TEN)
     exp = (10**20) % self.MOD
     self.assertEqual(exp, ans.x)