Skip to content
Related Articles

Related Articles

Find if nCr is divisible by the given prime
  • Last Updated : 27 May, 2019

Given three integers N, R and P where P is prime, the task is to find whether NCR is divisible by P or not.

Examples:

Input: N = 6, R = 2, P = 7
Output: No
6C2 = 15 which is not divisible by 7.

Input: N = 7, R = 2, P = 3
Output: Yes
7C2 = 21 which is divisible by 3.

Approach: We know that NCR = N! / (R! * (N – R)!). Now using Legendre Formula, find the largest power of P which divides any N!, R! and (N -R)! say x1, x2 and x3 respectively.
In order for NCR to be divisible by P, the condition x1 > x2 + x3 must be satisfied.



Below is the implementation of the above approach:

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
#define ll long long int
using namespace std;
  
// Function to return the highest
// power of p that divides n!
// implementing Legendre Formula
int getfactor(int n, int p)
{
    int pw = 0;
  
    while (n) {
        n /= p;
        pw += n;
    }
  
    // Return the highest power of p
    // which divides n!
    return pw;
}
  
// Function that returns true
// if nCr is divisible by p
bool isDivisible(int n, int r, int p)
{
    // Find the highest powers of p
    // that divide n!, r! and (n - r)!
    int x1 = getfactor(n, p);
    int x2 = getfactor(r, p);
    int x3 = getfactor(n - r, p);
  
    // If nCr is divisible by p
    if (x1 > x2 + x3)
        return true;
  
    return false;
}
  
// Driver code
int main()
{
    int n = 7, r = 2, p = 7;
  
    if (isDivisible(n, r, p))
        cout << "Yes";
    else
        cout << "No";
  
    return 0;
}

Java




// Java Implementation of above approach
import java.io.*; 
  
class GFG 
  
// Function to return the highest 
// power of p that divides n! 
// implementing Legendre Formula 
static int getfactor(int n, int p) 
    int pw = 0
  
    while (n != 0
    
        n /= p; 
        pw += n; 
    
  
    // Return the highest power of p 
    // which divides n! 
    return pw; 
  
// Function to return N digits 
// number which is divisible by D 
static int isDivisible(int n, int r, int p) 
    // Find the highest powers of p 
    // that divide n!, r! and (n - r)! 
    int x1 = getfactor(n, p); 
    int x2 = getfactor(r, p); 
    int x3 = getfactor(n - r, p); 
  
    // If nCr is divisible by p 
    if (x1 > x2 + x3) 
        return 1
  
    return 0
  
// Driver code 
public static void main (String[] args)
    int n = 7, r = 2, p = 7
  
    if (isDivisible(n, r, p) == 1
        System.out.print("Yes");
    else
        System.out.print("No");
  
  
// This code is contributed by krikti..

Python3




# Python3 implementation of the approach 
  
# Function to return the highest 
# power of p that divides n! 
# implementing Legendre Formula 
def getfactor(n, p) : 
  
    pw = 0
  
    while (n) : 
        n //= p; 
        pw += n; 
      
  
    # Return the highest power of p 
    # which divides n! 
    return pw; 
  
  
# Function that returns true 
# if nCr is divisible by p 
def isDivisible(n, r, p) :
      
    # Find the highest powers of p 
    # that divide n!, r! and (n - r)! 
    x1 = getfactor(n, p); 
    x2 = getfactor(r, p); 
    x3 = getfactor(n - r, p); 
  
    # If nCr is divisible by p 
    if (x1 > x2 + x3) :
        return True
  
    return False
  
  
# Driver code 
if __name__ == "__main__" :
      
    n = 7; r = 2; p = 7
  
    if (isDivisible(n, r, p)) : 
        print("Yes"); 
    else :
        print("No"); 
          
# This code is contributed by AnkitRai01

C#




// C# Implementation of above approach
using System;
  
class GFG
{
      
// Function to return the highest 
// power of p that divides n! 
// implementing Legendre Formula 
static int getfactor(int n, int p) 
    int pw = 0; 
  
    while (n != 0) 
    
        n /= p; 
        pw += n; 
    
  
    // Return the highest power of p 
    // which divides n! 
    return pw; 
  
// Function to return N digits 
// number which is divisible by D 
static int isDivisible(int n, int r, int p) 
    // Find the highest powers of p 
    // that divide n!, r! and (n - r)! 
    int x1 = getfactor(n, p); 
    int x2 = getfactor(r, p); 
    int x3 = getfactor(n - r, p); 
  
    // If nCr is divisible by p 
    if (x1 > x2 + x3) 
        return 1; 
  
    return 0; 
  
// Driver code 
static public void Main ()
{
    int n = 7, r = 2, p = 7; 
  
    if (isDivisible(n, r, p) == 1) 
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
  
  
// This code is contributed by ajit.
Output:
Yes

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up
Recommended Articles
Page :