GeeksforGeeks App
Open App
Browser
Continue

# Probability of distributing M items among X bags such that first bag contains N items

Given three integers N, M, X. The task is to find the probability of distributing M items among X bags such that first bag contains N items

Examples:

Input : M = 7, X =3, N = 3
Output : 0.2
The Number of ways to keep 7 items in 3 bags is
The Number of ways to keep 4 items in 2 bags is . As the first bag contains 3 items.
The probability is /

Input : M = 9, X = 3, N = 4
Output : 0.142857

Approach :
In general, the Number of ways to place N items in K bags is

• The Number of ways to keep M items in X bags is .
• The Number of ways to keep (M-N) items in (X-1) bags is . As the first bag contains N items.
• The probability is /.

Below is the implementation of the above approach:

## C++

 `// CPP program to find probability of``// first bag to contain N items such``// that M items are distributed among X bags``#include ``using` `namespace` `std;` `// Function to find factorial of a number``int` `factorial(``int` `n)``{``    ``if` `(n <= 1)``        ``return` `1;``    ``return` `n * factorial(n - 1);``}` `// Function to find nCr``int` `nCr(``int` `n, ``int` `r)``{``    ``return` `factorial(n) / (factorial(r) * factorial(n - r));``}` `// Function to find probability of``// first bag to contain N items such``// that M items are distributed among X bags``float` `Probability(``int` `M, ``int` `N, ``int` `X)``{``    ``return` `(``float``)(nCr(M - N - 1, X - 2) /``                    ``(nCr(M - 1, X - 1) * 1.0));``}` `// Driver code``int` `main()``{``    ``int` `M = 9, X = 3, N = 4;` `    ``// Function call``    ``cout << Probability(M, N, X);` `    ``return` `0;``}`

## Java

 `// Java program to find probability of``// first bag to contain N items such``// that M items are distributed among X bags` `class` `GFG``{` `    ``// Function to find factorial of a number``    ``public` `static` `int` `factorial(``int` `n)``    ``{``        ``if` `(n <= ``1``)``            ``return` `1``;` `        ``return` `n * factorial(n - ``1``);``    ``}` `    ``// Function to find nCr``    ``public` `static` `int` `nCr(``int` `n, ``int` `r)``    ``{``        ``return` `factorial(n) / (factorial(r) * factorial(n - r));``    ``}` `    ``// Function to find probability of``    ``// first bag to contain N items such``    ``// that M items are distributed among X bags``    ``public` `static` `float` `Probability(``int` `M, ``int` `N, ``int` `X)``    ``{``        ``return` `(``float``) (nCr(M - N - ``1``, X - ``2``) / (nCr(M - ``1``, X - ``1``) * ``1.0``));``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `M = ``9``, X = ``3``, N = ``4``;` `        ``// Function call``        ``System.out.println(Probability(M, N, X));``    ``}``}` `// This code is contributed by``// sanjeev2552`

## Python3

 `# Python3 program to find probability of``# first bag to contain N items such``# that M items are distributed among X bags` `# Function to find factorial of a number``def` `factorial(n) :` `    ``if` `(n <``=` `1``) :``        ``return` `1``;``        ` `    ``return` `n ``*` `factorial(n ``-` `1``);` `# Function to find nCr``def` `nCr(n, r) :` `    ``return` `(factorial(n) ``/` `(factorial(r) ``*``                            ``factorial(n ``-` `r)));` `# Function to find probability of``# first bag to contain N items such``# that M items are distributed among X bags``def` `Probability(M, N, X) :` `    ``return` `float``(nCr(M ``-` `N ``-` `1``, X ``-` `2``) ``/``                ``(nCr(M ``-` `1``, X ``-` `1``) ``*` `1.0``));` `# Driver code``if` `__name__ ``=``=` `"__main__"` `:` `    ``M ``=` `9``; X ``=` `3``; N ``=` `4``;` `    ``# Function call``    ``print``(Probability(M, N, X));` `# This code is contributed by AnkitRai01`

## C#

 `// C# program to find probability of``// first bag to contain N items such``// that M items are distributed among X bags``using` `System;` `class` `GFG``{`` ` `    ``// Function to find factorial of a number``    ``static` `int` `factorial(``int` `n)``    ``{``        ``if` `(n <= 1)``            ``return` `1;`` ` `        ``return` `n * factorial(n - 1);``    ``}`` ` `    ``// Function to find nCr``    ``static` `int` `nCr(``int` `n, ``int` `r)``    ``{``        ``return` `factorial(n) / (factorial(r) * factorial(n - r));``    ``}`` ` `    ``// Function to find probability of``    ``// first bag to contain N items such``    ``// that M items are distributed among X bags``    ``static` `float` `Probability(``int` `M, ``int` `N, ``int` `X)``    ``{``        ``return` `(``float``) (nCr(M - N - 1, X - 2) / (nCr(M - 1, X - 1) * 1.0));``    ``}`` ` `    ``// Driver code``    ``static` `void` `Main()``    ``{``        ``int` `M = 9, X = 3, N = 4;`` ` `        ``// Function call``        ``Console.WriteLine(Probability(M, N, X));``    ``}``}`` ` `// This code is contributed by``// mohitkumar 29`

## Javascript

 ``

Output:

`0.142857`

Time Complexity: O(n), time taken by the algorithm is linear as the recursion runs for n times
Auxiliary Space: O(n) due to the recursive call stack, In worst case the stack will contain all recursive calls till n becomes 0 hence the space taken by the algorithm is linear

My Personal Notes arrow_drop_up