Combinatoric Functions
''' combonatorics 4/12/2026 Edward Shore round to nearest integer: int(f+.5) ''' from math import * # factorial positive integers def fact(n): f,i=1,1 while i<=n: f*=i i+=1 return int(f+.5) # a lot of functions will use fact # combination def ncr(n,r): f=fact(n)/(fact(r)*fact(n-r)) return int(f+.5) # permutation def npr(n,r): f=fact(n)/fact(n-r) return int(f+.5) # combination w/repetitions def nhr(n,r): f=fact(n+r-1)/(fact(r)*fact(n-1)) return int(f+.5) # catalan numbers def catalan(n): f=fact(2*n)/(fact(n)**2*(n+1)) return int(f+.5) # narayana numbers def narayana(n,k): f=1/n*ncr(n,k)*ncr(n,k-1) return int(f+.5) # binomial probability def binpdf(n,k,p): # p=prob f=ncr(n,k)*p**k*(1-p)**(n-k) return f # bin lower tail def bincdf(n,k,p): # 0 to k, p=prob s=0 for i in range(k+1): s+=binpdf(n,i,p) return s