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]
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)
def create(args): dir=args[0] if len(args)>1: proof=args[1] else: proof=None m=Mint(dir) m.create(proof)
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
def create(args): username = args[0] token = args[1] project = args[2] branch = args[3] m = Mint("GitBank") agh = github.GitHub(username, token) user = agh.users.show(username) parts = project.split("/") commits = agh.commits.forBranch(parts[0], parts[1], branch) collabs = agh.repos.collaborators(parts[0], parts[1]) if username in collabs: print("You can't mint from your own repo.") else: print("Searching for commits") for commit in commits: if commit.committer.login == username: print("http://github.com" + commit.url) m.create(commit.url)
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)
def test_pow(self): a = Mint(2) n = 10 ans = a**n self.assertEqual(2**10, ans.x)
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)
def test_mul(self): a = Mint(4) b = Mint(2) ans = a * b self.assertEqual(8, ans.x)
def test_div_2(self): a = Mint(self.TEN * 2) b = Mint(self.TEN) ans = a // b self.assertEqual(2, ans.x)
def test_sub(self): a = Mint(4) b = Mint(2) ans = a - b self.assertEqual(2, ans.x)
def test_idiv_2(self): ans = Mint(self.TEN) ans //= Mint(2) self.assertEqual((self.TEN // 2) % self.MOD, ans.x)
def test_idiv(self): ans = Mint(10) ans //= Mint(2) self.assertEqual(5, ans.x)
def test_isub_2(self): ans = Mint(self.TEN * 2) ans -= Mint(self.TEN) exp = self.TEN % self.MOD self.assertEqual(exp, ans.x)
def test_imul(self): ans = Mint(10) ans *= Mint(2) self.assertEqual(20, ans.x)
def test_isub(self): ans = Mint(10) ans -= Mint(2) self.assertEqual(8, ans.x)
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)
def test_iadd(self): ans = Mint(4) ans += Mint(4) self.assertEqual(8, ans.x)
def test_init(self): ans = Mint(self.TEN) self.assertEqual(self.TEN % self.MOD, ans.x)
def test_add(self): a = Mint(2) b = Mint(2) ans = a + b self.assertEqual(4, ans.x) self.assertEqual(2, a.x)
def test_pow_2(self): a = Mint(self.TEN) n = 2 ans = a**n exp = 10**20 % self.MOD self.assertEqual(exp, ans.x)
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)
def test_imul_2(self): ans = Mint(self.TEN) ans *= Mint(self.TEN) exp = (10**20) % self.MOD self.assertEqual(exp, ans.x)
def test_div(self): a = Mint(4) b = Mint(2) ans = a // b self.assertEqual(2, ans.x)