# Space and time efficient Binomial Coefficient

Write a function that takes two parameters n and k and returns the value of Binomial Coefficient C(n, k). For example, your function should return 6 for n = 4 and k = 2, and it should return 10 for n = 5 and k = 2.

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

We have discussed a O(n*k) time and O(k) extra space algorithm in this post. The value of C(n, k) can be calculated in O(k) time and O(1) extra space.

```C(n, k) = n! / (n-k)! * k!
= [n * (n-1) *....* 1]  / [ ( (n-k) * (n-k-1) * .... * 1) *
( k * (k-1) * .... * 1 ) ]
After simplifying, we get
C(n, k) = [n * (n-1) * .... * (n-k+1)] / [k * (k-1) * .... * 1]

Also, C(n, k) = C(n, n-k)  // we can change r to n-r if r > n-r ```

Following implementation uses above formula to calculate C(n, k)

## C/C++

```// Program to calculate C(n ,k)
#include <stdio.h>

// Returns value of Binomial Coefficient C(n, k)
int binomialCoeff(int n, int k)
{
int res = 1;

// Since C(n, k) = C(n, n-k)
if ( k > n - k )
k = n - k;

// Calculate value of [n * (n-1) *---* (n-k+1)] / [k * (k-1) *----* 1]
for (int i = 0; i < k; ++i)
{
res *= (n - i);
res /= (i + 1);
}

return res;
}

/* Drier program to test above function*/
int main()
{
int n = 8, k = 2;
printf ("Value of C(%d, %d) is %d ", n, k, binomialCoeff(n, k) );
return 0;
}
```

## Java

```// Program to calculate C(n ,k) in java
class BinomialCoefficient
{
// Returns value of Binomial Coefficient C(n, k)
static int binomialCoeff(int n, int k)
{
int res = 1;

// Since C(n, k) = C(n, n-k)
if ( k > n - k )
k = n - k;

// Calculate value of [n * (n-1) *---* (n-k+1)] / [k * (k-1) *----* 1]
for (int i = 0; i < k; ++i)
{
res *= (n - i);
res /= (i + 1);
}

return res;
}

/* Driver program to test above function*/
public static void main(String[] args)
{
int n = 8;
int k = 2;
System.out.println("Value of C("+ n + ", " + k+ ") "
+ "is" + " "+ binomialCoeff(n, k));
}

}
// This Code is Contributed by Saket Kumar
```

## Python

```# Python program to calculate C(n ,k)

# Returns value of Binomial Coefficient
# C(n, k)
def binomialCoefficient(n, k):
# since C(n, k) = C(n, n - k)
if(k > n - k):
k = n - k
# initialize result
res = 1
# Calculate value of
# [n * (n-1) *---* (n-k + 1)] / [k * (k-1) *----* 1]
for i in range(k):
res = res * (n - i)
res = res / (i + 1)
return res

# Driver program to test above function
n = 8
k = 2
res = binomialCoefficient(n, k)
print("Value of C(%d, %d) is %d" %(n, k, res))

# This code is contributed by Aditi Sharma
```
`Value of C(8, 2) is 28`

Time Complexity: O(k)
Auxiliary Space: O(1)

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
2.6 Average Difficulty : 2.6/5.0
Based on 31 vote(s)