# Number of ways of distributing N identical objects in R distinct groups

Given two integers **N** and **R**, the task is to calculate the number of ways to distribute **N** identical objects into **R** distinct groups.

**Examples:**

Input:N = 4, R = 2

Output:2

No of objects in 1st group = 0, in second group = 4

No of objects in 1st group = 1, in second group = 3

No of objects in 1st group = 2, in second group = 2

No of objects in 1st group = 3, in second group = 1

No of objects in 1st group = 4, in second group = 0

Input:N = 4, R = 3

Output:15

**Approach:** Idea is to use Multinomial theorem. Let us suppose that **x _{1}** objects are placed in the first group,

**x**objects are placed in the second group and

_{2}**x**objects are placed in the R

_{R}^{th}group. It is given that,

**x**

_{1}+ x_{2}+ x_{3}+…+ x_{R}= NThe solution of this equation by multinomial theorem is given by

**.**

^{N + R – 1}C_{R – 1}Below is the implementation of the above approach:

## C++

`// C++ implementation of the above approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to return the ` `// value of ncr effectively ` `int` `ncr(` `int` `n, ` `int` `r) ` `{ ` ` ` ` ` `// Initialize the answer ` ` ` `int` `ans = 1; ` ` ` ` ` `for` `(` `int` `i = 1; i <= r; i += 1) { ` ` ` ` ` `// Divide simultaneously by ` ` ` `// i to avoid overflow ` ` ` `ans *= (n - r + i); ` ` ` `ans /= i; ` ` ` `} ` ` ` `return` `ans; ` `} ` ` ` `// Function to return the number of ` `// ways to distribute N identical ` `// objects in R distinct objects ` `int` `NoOfDistributions(` `int` `N, ` `int` `R) ` `{ ` ` ` `return` `ncr(N + R - 1, R - 1); ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `N = 4, R = 3; ` ` ` ` ` `cout << NoOfDistributions(N, R); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java implementation of the above approach ` `import` `java.util.*; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to return the ` ` ` `// value of ncr effectively ` ` ` `static` `int` `ncr(` `int` `n, ` `int` `r) ` ` ` `{ ` ` ` ` ` `// Initialize the answer ` ` ` `int` `ans = ` `1` `; ` ` ` ` ` `for` `(` `int` `i = ` `1` `; i <= r; i += ` `1` `) ` ` ` `{ ` ` ` ` ` `// Divide simultaneously by ` ` ` `// i to avoid overflow ` ` ` `ans *= (n - r + i); ` ` ` `ans /= i; ` ` ` `} ` ` ` `return` `ans; ` ` ` `} ` ` ` ` ` `// Function to return the number of ` ` ` `// ways to distribute N identical ` ` ` `// objects in R distinct objects ` ` ` `static` `int` `NoOfDistributions(` `int` `N, ` `int` `R) ` ` ` `{ ` ` ` `return` `ncr(N + R - ` `1` `, R - ` `1` `); ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `public` `static` `void` `main(String[] args) ` ` ` `{ ` ` ` `int` `N = ` `4` `, R = ` `3` `; ` ` ` `System.out.println(NoOfDistributions(N, R)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Princi Singh ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 implementation of the above approach ` ` ` `# Function to return the ` `# value of ncr effectively ` `def` `ncr(n, r): ` ` ` ` ` ` ` `# Initialize the answer ` ` ` `ans ` `=` `1` ` ` ` ` `for` `i ` `in` `range` `(` `1` `,r` `+` `1` `): ` ` ` ` ` `# Divide simultaneously by ` ` ` `# i to avoid overflow ` ` ` `ans ` `*` `=` `(n ` `-` `r ` `+` `i) ` ` ` `ans ` `/` `/` `=` `i ` ` ` ` ` `return` `ans ` ` ` ` ` `# Function to return the number of ` `# ways to distribute N identical ` `# objects in R distinct objects ` `def` `NoOfDistributions(N, R): ` ` ` ` ` `return` `ncr(N ` `+` `R` `-` `1` `, R ` `-` `1` `) ` ` ` `# Driver code ` `N ` `=` `4` `R ` `=` `3` ` ` `print` `(NoOfDistributions(N, R)) ` ` ` `# This code is contributed by mohit kumar 29 ` |

*chevron_right*

*filter_none*

## C#

`// C# implementation of the above approach ` `using` `System; ` ` ` `class` `GFG ` `{ ` ` ` ` ` `// Function to return the ` ` ` `// value of ncr effectively ` ` ` `static` `int` `ncr(` `int` `n, ` `int` `r) ` ` ` `{ ` ` ` ` ` `// Initialize the answer ` ` ` `int` `ans = 1; ` ` ` ` ` `for` `(` `int` `i = 1; i <= r; i += 1) ` ` ` `{ ` ` ` ` ` `// Divide simultaneously by ` ` ` `// i to avoid overflow ` ` ` `ans *= (n - r + i); ` ` ` `ans /= i; ` ` ` `} ` ` ` `return` `ans; ` ` ` `} ` ` ` ` ` `// Function to return the number of ` ` ` `// ways to distribute N identical ` ` ` `// objects in R distinct objects ` ` ` `static` `int` `NoOfDistributions(` `int` `N, ` `int` `R) ` ` ` `{ ` ` ` `return` `ncr(N + R - 1, R - 1); ` ` ` `} ` ` ` ` ` `// Driver code ` ` ` `static` `public` `void` `Main () ` ` ` `{ ` ` ` `int` `N = 4, R = 3; ` ` ` `Console.WriteLine(NoOfDistributions(N, R)); ` ` ` `} ` `} ` ` ` `// This code is contributed by AnkitRai01 ` |

*chevron_right*

*filter_none*

**Output:**

15

**Time Complexity:** O(R)

## Recommended Posts:

- Number of ways of distributing N identical objects in R distinct groups with no groups empty
- Number of ways to arrange K different objects taking N objects at a time
- Calculate Stirling numbers which represents the number of ways to arrange r objects around n different circles
- Ways of dividing a group into two halves such that two elements are in different groups
- Number of Groups of Sizes Two Or Three Divisible By 3
- Print a number strictly less than a given number such that all its digits are distinct.
- Find the number of ways to divide number into four parts such that a = c and b = d
- Count number of ways to divide a number in 4 parts
- Distributing M items in a circle of size N starting from K-th position
- Number of ways to choose a pair containing an even and an odd number from 1 to N
- Number of ways to get a given sum with n number of m-faced dices
- Number of distinct subsets of a set
- Check whether a number has exactly three distinct factors or not
- Number of distinct integers obtained by lcm(X, N)/X
- Count number of distinct substrings of a given length

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.