📜  查找nCr是否可被给定素数整除

📅  最后修改于: 2021-06-25 13:54:29             🧑  作者: Mango

给定三个整数NRP ,其中P为质数,任务是确定N C R是否可被P整除。
例子:

方法:我们知道N C R = N! /(R!*(N – R)!) 。现在使用勒让德公式,找到P的最大幂除以N!R!(N -R)!分别说x1x2x3
为了使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.


Javascript


输出:
Yes