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 6\choose 2.
The Number of ways to keep 4 items in 2 bags is 3\choose 1. As the first bag contains 3 items.
The probability is 3\choose 1/6\choose 2



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 N-1\choose K-1.

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

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find probability of
// first bag to contain N items such
// that M items are distributed among X bags
#include <bits/stdc++.h>
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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output:

0.142857


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.