给定三个整数N , R和P ,其中P为质数,任务是确定N C R是否可被P整除。
例子:
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.
方法:我们知道N C R = N! /(R!*(N – R)!) 。现在使用勒让德公式,找到P的最大幂除以N! , R!和(N -R)!分别说x1 , x2和x3 。
为了使N C R可被P整除,必须满足条件x1> x2 + x3 。
下面是上述方法的实现:
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.
输出:
Yes