GCD of factorials of two numbers

Given two numbers m and n. Find the GCD of the their factorial.

**Examples :**

Input : n = 3, m = 4 Output : 6 Explanation: Factorial of n = 1 * 2 * 3 = 6 Factorial of m = 1 * 2 * 3 * 4 = 24 GCD(6, 24) = 6. Input : n = 9, m = 5 Output : 20 Explanation: Factorial of n = 1 * 2 * 3 *4 * 5 * 6 * 7 * 8 * 9 = 362880 Factorial of m = 1 * 2 * 3 * 4 * 5 = 120 GCD(362880, 120) = 120

A **simple solution** is to find factorials of both numbers. Then find GCD of the computed factorials.

An **efficient solution** is based on the fact that GCD of two factorials is equal to smaller factorial (note that factorials have all terms common).

Below is the implementation of above approach.

## C++

`// CPP program to find GCD of factorial of two ` `// numbers. ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `int` `factorial(` `int` `x) ` `{ ` ` ` `if` `(x <= 1) ` ` ` `return` `1; ` ` ` `int` `res = 2; ` ` ` `for` `(` `int` `i = 3; i <= x; i++) ` ` ` `res = res * i; ` ` ` `return` `res; ` `} ` ` ` `int` `gcdOfFactorial(` `int` `m, ` `int` `n) ` `{ ` ` ` `return` `factorial(min(m, n)); ` `} ` ` ` `int` `main() ` `{ ` ` ` `int` `m = 5, n = 9; ` ` ` `cout << gcdOfFactorial(m, n); ` ` ` `return` `0; ` `} ` |

## Java

`// Java program to find GCD of factorial ` `// of two numbers. ` `public` `class` `FactorialGCD{ ` ` ` `static` `int` `factorial(` `int` `x) ` `{ ` ` ` `if` `(x <= ` `1` `) ` ` ` `return` `1` `; ` ` ` `int` `res = ` `2` `; ` ` ` `for` `(` `int` `i = ` `3` `; i <= x; i++) ` ` ` `res = res * i; ` ` ` `return` `res; ` `} ` ` ` `static` `int` `gcdOfFactorial(` `int` `m, ` `int` `n) ` `{ ` ` ` `int` `min = m < n ? m : n; ` ` ` `return` `factorial(min); ` `} ` ` ` ` ` `/* Driver program to test above functions */` ` ` `public` `static` `void` `main (String[] args) ` ` ` `{ ` ` ` `int` `m = ` `5` `, n = ` `9` `; ` ` ` ` ` `System.out.println(gcdOfFactorial(m, n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Prerna Saini ` |

## Python

`# Python code to find GCD of factorials of ` `# two numbers. ` `import` `math ` ` ` `def` `gcdOfFactorial(m, n) : ` ` ` `return` `math.factorial(` `min` `(m, n)) ` ` ` `# Driver code ` `m ` `=` `5` `n ` `=` `9` `print` `(gcdOfFactorial(m, n)) ` |

## C#

`// C# program to find GCD of factorial ` `// of two numbers. ` `using` `System; ` ` ` `public` `class` `GFG{ ` ` ` ` ` `static` `int` `factorial(` `int` `x) ` ` ` `{ ` ` ` `if` `(x <= 1) ` ` ` `return` `1; ` ` ` ` ` `int` `res = 2; ` ` ` ` ` `for` `(` `int` `i = 3; i <= x; i++) ` ` ` `res = res * i; ` ` ` ` ` `return` `res; ` ` ` `} ` ` ` ` ` `static` `int` `gcdOfFactorial(` `int` `m, ` `int` `n) ` ` ` `{ ` ` ` `int` `min = m < n ? m : n; ` ` ` `return` `factorial(min); ` ` ` `} ` ` ` ` ` `/* Driver program to test above functions */` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` ` ` `int` `m = 5, n = 9; ` ` ` ` ` `Console.WriteLine(gcdOfFactorial(m, n)); ` ` ` `} ` `} ` ` ` `// This code is contributed by Anant Agarwal. ` |

## PHP

`<?php ` `// PHP program to find GCD ` `// of factorial of two numbers. ` ` ` `function` `factorial(` `$x` `) ` `{ ` ` ` `if` `(` `$x` `<= 1) ` ` ` `return` `1; ` ` ` `$res` `= 2; ` ` ` `for` `(` `$i` `= 3; ` `$i` `<= ` `$x` `; ` `$i` `++) ` ` ` `$res` `= ` `$res` `* ` `$i` `; ` ` ` `return` `$res` `; ` `} ` ` ` `function` `gcdOfFactorial(` `$m` `, ` `$n` `) ` `{ ` ` ` `return` `factorial(min(` `$m` `, ` `$n` `)); ` `} ` ` ` `// Driver Code ` `$m` `= 5; ` `$n` `= 9; ` `echo` `gcdOfFactorial(` `$m` `, ` `$n` `); ` ` ` `// This code is contributed by ajit ` `?> ` |

**Output :**

120

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.