Problem 53 : Combinatoric selections

Problem Statement

There are exactly ten ways of selecting three from five, 12345:

123, 124, 125, 134, 135, 145, 234, 235, 245, and 345

In combinatorics, we use the notation,

(53)=10

In general,

(nr)=n!r!(nr)!

where rn , n!=n×(n1)××3×2×1 and 0!=1

It is not until n=23, that a value exceeds one-million:

(2310)=1144066

How many, not necessarily distinct, values of (nr) for 1n100 are greater than one-million?

Solution

dic=[1]

for i in range(1,101):
    val =dic[-1]*i
    dic.append(val)


def choose(n,r):
    sol = dic[n]//(dic[n-r]*dic[r])
    return sol

def func(maxi, valu): 
    count = 0
    for i in range(2,maxi+1):
        for j in range(1,i+1):
            val = choose(i,j)
            if  val>valu:
                count+=1         
    return count


print(func(100, 10**6))

Ouputs

4075