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

• Difficulty Level : Medium
• Last Updated : 05 Nov, 2021

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

```Input:  n = 7, p = 3
Output: x = 2
32 divides 7! and 2 is the largest such power of 3.

Input:  n = 10, p = 3
Output: x = 4
34 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 p2, p3, …
How many numbers in {1, 2, 3, 4, ….. n} are divisible by p2, p3, …?
There are ⌊n/(p2)⌋ numbers divisible by p2 (Every p2‘th number would be divisible). Similarly, there are ⌊n/(p3)⌋ numbers divisible by p3 and so on.
What is the largest possible value of x?
So the largest possible power is ⌊n/p⌋ + ⌊n/(p2)⌋ + ⌊n/(p3)⌋ + ……
Note that we add only ⌊n/(p2)⌋ only once (not twice) as one p is already considered by expression ⌊n/p⌋. Similarly, we consider ⌊n/(p3)⌋ (not thrice).
Below is implementation of above idea.

## C++

 `// C++ program to find largest x such that p*x divides n!``#include ``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 ` `// 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

 ``

## Javascript

 ``

Output:

`The largest power of 3 that divides 10! is 4`

Time complexity: O(logpn)

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