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.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 ``#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