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

📅  最后修改于: 2021-04-28 18:17:46             🧑  作者: 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.


输出:
Yes