Question: 
Write a function to compute the value of ncr%p.


Model's Code:
def ncr_modp(n, r, p):
    if r > n:
        return 0
    if r == 0 or r == n:
        return 1

    # Precompute factorials and modular inverses
    factorial = [1] * (n + 1)
    for i in range(2, n + 1):
        factorial[i] = factorial[i - 1] * i % p

    def mod_inverse(a, mod):
        return pow(a, mod - 2, mod)

    numerator = factorial[n]
    denominator = (factorial[r] * factorial[n - r]) % p
    return (numerator * mod_inverse(denominator, p)) % p



Sample Correct Code:
def ncr_modp(n, r, p): 
    C = [0 for i in range(r+1)]   
    C[0] = 1
    for i in range(1, n+1): 
        for j in range(min(i, r), 0, -1): 
            C[j] = (C[j] + C[j-1]) % p   
    return C[r] 


Asserts:
assert ncr_modp(10,2,13)==6
assert ncr_modp(15,12,43)==25
assert ncr_modp(17,9,18)==10


Tests:
Test 1 of 3: PASS
Test 2 of 3: PASS
Test 3 of 3: FAIL: AssertionError()

Test 402 of 974: 290/402 (72.13930348258707%): failed