Question: So I'm learning python so I'm going through some project euler problems. And I'm not sure if this is a python problem I'm having, or just me being retarded, but I seem to be getting the wrong answer for problem 53. Here's a link to the problem <http://projecteuler.net/index.php?section=problems&id=53>

and this is my code:

```

from math import factorial

def ncr(n,r):
    return (factorial(n)/(factorial(r)*factorial(n-r)))

i = 0

for x in range(1,100):
    for y in range(0,x):
        if(ncr(x,y) > 1000000):
            i=i+1

print i

```

I'm getting 3982 which is apparently the wrong answer. Is something wrong that I'm doing that's specific to python?

Answer: 
`range( a, b)` does not include `b`.
Considering the input from the [problem specification](http://projecteuler.net/index.php?section=problems&id=53):
 "*It is not until n = 23, that a value exceeds one-million*",
you can make the range for the outer from 23 to 101:

```
for x in range(23,101):
  ...

```

Furthermore, n over k can be calculated faster without generating the three factorials:

```
def noverk(n,k):
  noverk=1
  if 2*k < n:
    k=n-k;
  for i in range(1,n-k+1):
    noverk *= (i+k)
    noverk /= i
  return noverk;

```