# 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 = 2Output:5

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 = 3Output: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;` ` ` `// Function call` ` ` `cout << NoOfDistributions(N, R);` ` ` `return` `0;` `}` |

## 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` `;` ` ` ` ` `// Function call` ` ` `System.out.println(NoOfDistributions(N, R));` ` ` `}` `}` `// This code is contributed by Princi Singh` |

## 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` `# Function call` `print` `(NoOfDistributions(N, R))` `# This code is contributed by mohit kumar 29` |

## 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;` ` ` ` ` `// Function call` ` ` `Console.WriteLine(NoOfDistributions(N, R));` ` ` `}` `}` `// This code is contributed by AnkitRai01` |

## Javascript

`<script>` `// Javascript implementation of the above approach` `// Function to return the` `// value of ncr effectively` `function` `ncr(n, r)` `{` ` ` ` ` `// Initialize the answer` ` ` `let ans = 1;` ` ` `for` `(let i = 1; i <= r; i += 1)` ` ` `{` ` ` ` ` `// Divide simultaneously by` ` ` `// i to avoid overflow` ` ` `ans *= (n - r + i);` ` ` `ans = parseInt(ans / i);` ` ` `}` ` ` `return` `ans;` `}` `// Function to return the number of` `// ways to distribute N identical` `// objects in R distinct objects` `function` `NoOfDistributions(N, R)` `{` ` ` `return` `ncr(N + R - 1, R - 1);` `}` `// Driver code` `let N = 4, R = 3;` `// Function call` `document.write(NoOfDistributions(N, R));` ` ` `// This code is contributed by subhammahato348` ` ` `</script>` |

**Output**

15

**Time Complexity:** O(R)