# Legendre’s formula (Given p and n, find the largest x such that p^x divides n!)

Given an integer n and a prime number p, find the largest x such that p^{x} (p raised to power x) divides n! (factorial) **Examples:**

Input: n = 7, p = 3 Output: x = 2 3^{2}divides 7! and 2 is the largest such power of 3. Input: n = 10, p = 3 Output: x = 4 3^{4}divides 10! and 4 is the largest such power of 3.

n! is multiplication of {1, 2, 3, 4, …n}.**How many numbers in {1, 2, 3, 4, ….. n} are divisible by p?**

Every p’th number is divisible by p in {1, 2, 3, 4, ….. n}. Therefore in n!, there are âŒŠn/pâŒ‹ numbers divisible by p. So we know that the value of x (largest power of p that divides n!) is at-least âŒŠn/pâŒ‹. **Can x be larger than âŒŠn/pâŒ‹ ?**

Yes, there may be numbers which are divisible by p^{2}, p^{3}, … **How many numbers in {1, 2, 3, 4, ….. n} are divisible by p ^{2}, p^{3}, …?**

There are âŒŠn/(p

^{2})âŒ‹ numbers divisible by p

^{2}(Every p

^{2}‘th number would be divisible). Similarly, there are âŒŠn/(p

^{3})âŒ‹ numbers divisible by p

^{3}and so on.

**What is the largest possible value of x?**

So the largest possible power is âŒŠn/pâŒ‹ + âŒŠn/(p

^{2})âŒ‹ + âŒŠn/(p

^{3})âŒ‹ + ……

Note that we add only âŒŠn/(p

^{2})âŒ‹ only once (not twice) as one p is already considered by expression âŒŠn/pâŒ‹. Similarly, we consider âŒŠn/(p

^{3})âŒ‹ (not thrice).

Below is implementation of above idea.

## C++

`// C++ program to find largest x such that p*x divides n!` `#include <iostream>` `using` `namespace` `std;` `// Returns largest power of p that divides n!` `int` `largestPower(` `int` `n, ` `int` `p)` `{` ` ` `// Initialize result` ` ` `int` `x = 0;` ` ` `// Calculate x = n/p + n/(p^2) + n/(p^3) + ....` ` ` `while` `(n)` ` ` `{` ` ` `n /= p;` ` ` `x += n;` ` ` `}` ` ` `return` `x;` `}` `// Driver code` `int` `main()` `{` ` ` `int` `n = 10, p = 3;` ` ` `cout << ` `"The largest power of "` `<< p <<` ` ` `" that divides "` `<< n << ` `"! is "` `<<` ` ` `largestPower(n, p) << endl;` ` ` `return` `0;` `}` `// This code is contributed by shubhamsingh10` |

## C

`// C program to find largest x such that p*x divides n!` `#include <stdio.h>` `// Returns largest power of p that divides n!` `int` `largestPower(` `int` `n, ` `int` `p)` `{` ` ` `// Initialize result` ` ` `int` `x = 0;` ` ` `// Calculate x = n/p + n/(p^2) + n/(p^3) + ....` ` ` `while` `(n)` ` ` `{` ` ` `n /= p;` ` ` `x += n;` ` ` `}` ` ` `return` `x;` `}` `// Driver program` `int` `main()` `{` ` ` `int` `n = 10, p = 3;` ` ` `printf` `(` `"The largest power of %d that divides %d! is %d\n"` `,` ` ` `p, n, largestPower(n, p));` ` ` `return` `0;` `}` |

## Java

`// Java program to find largest x such that p*x divides n!` `import` `java.io.*;` `class` `GFG` `{` ` ` `// Function that returns largest power of p` ` ` `// that divides n!` ` ` `static` `int` `Largestpower(` `int` `n, ` `int` `p)` ` ` `{` ` ` `// Initialize result` ` ` `int` `ans = ` `0` `;` ` ` `// Calculate x = n/p + n/(p^2) + n/(p^3) + ....` ` ` `while` `(n > ` `0` `)` ` ` `{` ` ` `n /= p;` ` ` `ans += n;` ` ` `}` ` ` `return` `ans;` ` ` `}` ` ` `// Driver program` ` ` `public` `static` `void` `main (String[] args)` ` ` `{` ` ` `int` `n = ` `10` `;` ` ` `int` `p = ` `3` `;` ` ` `System.out.println(` `" The largest power of "` `+ p + ` `" that divides "` ` ` `+ n + ` `"! is "` `+ Largestpower(n, p));` ` ` ` ` ` ` `}` `}` |

## Python3

`# Python3 program to find largest` `# x such that p*x divides n!` `# Returns largest power of p that divides n!` `def` `largestPower(n, p):` ` ` ` ` `# Initialize result` ` ` `x ` `=` `0` ` ` `# Calculate x = n/p + n/(p^2) + n/(p^3) + ....` ` ` `while` `n:` ` ` `n ` `/` `=` `p` ` ` `x ` `+` `=` `n` ` ` `return` `x` `# Driver program` `n ` `=` `10` `; p ` `=` `3` `print` `(` `"The largest power of %d that divides %d! is %d\n"` `%` ` ` `(p, n, largestPower(n, p)))` ` ` `# This code is contributed by Shreyanshi Arun.` |

## C#

`// C# program to find largest x` `// such that p * x divides n!` `using` `System;` `public` `class` `GFG` `{` ` ` ` ` `// Function that returns largest ` ` ` `// power of p that divides n!` ` ` `static` `int` `Largestpower(` `int` `n, ` `int` `p)` ` ` `{` ` ` `// Initialize result` ` ` `int` `ans = 0;` ` ` `// Calculate x = n / p + n / (p ^ 2) +` ` ` `// n / (p ^ 3) + ....` ` ` `while` `(n > 0)` ` ` `{` ` ` `n /= p;` ` ` `ans += n;` ` ` `}` ` ` `return` `ans;` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `Main ()` ` ` `{` ` ` `int` `n = 10;` ` ` `int` `p = 3;` ` ` `Console.Write(` `" The largest power of "` `+ p + ` `" that divides "` ` ` `+ n + ` `"! is "` `+ Largestpower(n, p));` ` ` ` ` ` ` `}` `}` `// This code is contributed by Sam007` |

## PHP

`<?php` `// PHP program to find largest` `// x such that p*x divides n!` `// Returns largest power` `// of p that divides n!` `function` `largestPower(` `$n` `, ` `$p` `)` `{` ` ` `// Initialize result` ` ` `$x` `= 0;` ` ` `// Calculate x = n/p +` ` ` `// n/(p^2) + n/(p^3) + ....` ` ` `while` `(` `$n` `)` ` ` `{` ` ` `$n` `= (int)` `$n` `/ ` `$p` `;` ` ` `$x` `+= ` `$n` `;` ` ` `}` ` ` `return` `floor` `(` `$x` `);` `}` `// Driver Code` `$n` `= 10;` `$p` `= 3;` `echo` `"The largest power of "` `, ` `$p` `;` `echo` `" that divides "` `,` `$n` `, ` `"! is "` `;` `echo` `largestPower(` `$n` `, ` `$p` `);` ` ` `// This code is contributed by ajit` `?>` |

## Javascript

`<script>` `// Javascript program to find largest` `// x such that p*x divides n!` `// Returns largest power` `// of p that divides n!` `function` `largestPower(n, p)` `{` ` ` `// Initialize result` ` ` `let x = 0;` ` ` `// Calculate x = n/p +` ` ` `// n/(p^2) + n/(p^3) + ....` ` ` `while` `(n)` ` ` `{` ` ` `n = parseInt(n / p);` ` ` `x += n;` ` ` `}` ` ` `return` `Math.floor(x);` `}` `// Driver Code` `let n = 10;` `let p = 3;` `document.write(` `"The largest power of "` `+ p);` `document.write(` `" that divides "` `+ n + ` `"! is "` `);` `document.write(largestPower(n, p));` ` ` `// This code is contributed by _saurabh_jaiswal` `</script>` |

**Output:**

The largest power of 3 that divides 10! is 4

**Time complexity:** O(log_{p}n)

**Auxiliary Space: **O(1)**What to do if p is not prime?**

We can find all prime factors of p and compute result for every prime factor. Refer Largest power of k in n! (factorial) where k may not be prime for details.**Source:**

http://e-maxx.ru/algo/factorial_divisors

This article is contributed by **Ankur**. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.