Given a number 'n' and a prime number 'p'. We need to find out the power of 'p' in the prime factorization of n!
Examples:
Input : n = 4, p = 2
Output : 3
Power of 2 in the prime factorization
of 2 in 4! = 24 is 3
Input : n = 24, p = 2
Output : 22
Naive approach
The naive approach is to find the power of p in each number from 1 to n and add them. Because we know that during multiplication power is added.
// C++ implementation of finding
// power of p in n!
#include <bits/stdc++.h>
using namespace std;
// Returns power of p in n!
int PowerOFPINnfactorial(int n, int p)
{
// initializing answer
int ans = 0;
// initializing
int temp = p;
// loop until temp<=n
while (temp <= n) {
// add number of numbers divisible by temp
ans += n / temp;
// each time multiply temp by p
temp = temp * p;
}
return ans;
}
// Driver function
int main()
{
cout << PowerOFPINnfactorial(4, 2) << endl;
return 0;
}
// Java implementation of naive approach
public class GFG
{
// Method to calculate the power of prime number p in n!
static int PowerOFPINnfactorial(int n, int p)
{
// initializing answer
int ans = 0;
// finding power of p from 1 to n
for (int i = 1; i <= n; i++) {
// variable to note the power of p in i
int count = 0, temp = i;
// loop until temp is equal to i
while (temp % p == 0) {
count++;
temp = temp / p;
}
// adding count to i
ans += count;
}
return ans;
}
// Driver Method
public static void main(String[] args)
{
System.out.println(PowerOFPINnfactorial(4, 2));
}
}
# Python3 implementation of
# finding power of p in n!
# Returns power of p in n!
def PowerOFPINnfactorial(n, p):
# initializing answer
ans = 0;
# initializing
temp = p;
# loop until temp<=n
while (temp <= n):
# add number of numbers
# divisible by n
ans += n / temp;
# each time multiply
# temp by p
temp = temp * p;
return ans;
# Driver Code
print(PowerOFPINnfactorial(4, 2));
# This code is contributed by
# mits
// C# implementation of naive approach
using System;
public class GFG
{
// Method to calculate power
// of prime number p in n!
static int PowerOFPINnfactorial(int n, int p)
{
// initializing answer
int ans = 0;
// finding power of p from 1 to n
for (int i = 1; i <= n; i++) {
// variable to note the power of p in i
int count = 0, temp = i;
// loop until temp is equal to i
while (temp % p == 0) {
count++;
temp = temp / p;
}
// adding count to i
ans += count;
}
return ans;
}
// Driver Code
public static void Main(String []args)
{
Console.WriteLine(PowerOFPINnfactorial(4, 2));
}
}
// This code is contributed by vt_m.
<?php
// PHP implementation of
// finding power of p in n!
// Returns power of p in n!
function PowerOFPINnfactorial($n, $p)
{
// initializing answer
$ans = 0;
// initializing
$temp = $p;
// loop until temp<=n
while ($temp <= $n)
{
// add number of numbers
// divisible by n
$ans += $n / $temp;
// each time multiply
// temp by p
$temp = $temp * $p;
}
return $ans;
}
// Driver Code
echo PowerOFPINnfactorial(4, 2) . "\n";
// This code is contributed by
// Akanksha Rai(Abby_akku)
?>
<script>
// Javascript implementation of
// finding power of p in n!
// Returns power of p in n!
function PowerOFPINnfactorial(n, p)
{
// initializing answer
let ans = 0;
// initializing
let temp = p;
// loop until temp<=n
while (temp <= n)
{
// add number of numbers
// divisible by n
ans += n / temp;
// each time multiply
// temp by p
temp = temp * p;
}
return ans;
}
// Driver Code
document.write(PowerOFPINnfactorial(4, 2));
// This code is contributed by _saurabh_jaiswal
</script>
//function to find the power of p in n! in Kotlin
fun PowerOFPINnfactorial(n: Int, p: Int)
{
// initializing answer
var ans = 0;
// initializing
var temp = p;
// loop until temp<=n
while(temp<=n)
{
// add number of numbers divisible by temp
ans+=n/temp;
// each time multiply temp by p
temp*=p;
}
println(ans)
}
//Driver Code
fun main(args: Array<String>)
{
val n = 4
val p = 2
PowerOFPINnfactorial(n,p)
}
Output:
3
Time Complexity: O(logpn)
Auxiliary Space: O(1)
Efficient Approach
Before discussing efficient approach lets discuss a question given a two numbers n, m how many numbers are there from 1 to n that are divisible by m the answer is floor(n/m).
Now coming back to our original question to find the power of p in n! what we do is count the number of numbers from 1 to n that are divisible by p then by
Powerofp(n!) = floor(n/p) + floor(n/p^2) + floor(n/p^3)........
Below is the implementation of the above steps.
// C++ implementation of finding power of p in n!
#include <bits/stdc++.h>
using namespace std;
// Returns power of p in n!
int PowerOFPINnfactorial(int n, int p)
{
// initializing answer
int ans = 0;
// initializing
int temp = p;
// loop until temp<=n
while (temp <= n) {
// add number of numbers divisible by temp
ans += n / temp;
// each time multiply temp by p
temp = temp * p;
}
return ans;
}
// Driver function
int main()
{
cout << PowerOFPINnfactorial(4, 2) << endl;
return 0;
}
// Java implementation of finding power of p in n!
public class GFG
{
// Method to calculate the power of prime number p in n!
static int PowerOFPINnfactorial(int n, int p)
{
// initializing answer
int ans = 0;
// initializing
int temp = p;
// loop until temp<=n
while (temp <= n) {
// add number of numbers divisible by n
ans += n / temp;
// each time multiply temp by p
temp = temp * p;
}
return ans;
}
// Driver Method
public static void main(String[] args)
{
System.out.println(PowerOFPINnfactorial(4, 2));
}
}
# Python3 implementation of
# finding power of p in n!
# Returns power of p in n!
def PowerOFPINnfactorial(n, p):
# initializing answer
ans = 0
# initializing
temp = p
# loop until temp<=n
while (temp <= n) :
# add number of numbers
# divisible by n
ans += n / temp
# each time multiply
# temp by p
temp = temp * p
return int(ans)
# Driver Code
print(PowerOFPINnfactorial(4, 2))
# This code is contributed
# by Smitha
// C# implementation of finding
// power of p in n!
using System;
public class GFG
{
// Method to calculate power
// of prime number p in n!
static int PowerOFPINnfactorial(int n, int p)
{
// initializing answer
int ans = 0;
// initializing
int temp = p;
// loop until temp <= n
while (temp <= n) {
// add number of numbers divisible by n
ans += n / temp;
// each time multiply temp by p
temp = temp * p;
}
return ans;
}
// Driver Code
public static void Main(String []args)
{
Console.WriteLine(PowerOFPINnfactorial(4, 2));
}
}
// This code is contributed by vt_m.
<?php
// PHP implementation of
// finding power of p in n!
// Returns power of p in n!
function PowerOFPINnfactorial($n, $p)
{
// initializing answer
$ans = 0;
// initializing
$temp = $p;
// loop until temp<=n
while ($temp <= $n)
{
// add number of numbers divisible by n
$ans += $n / $temp;
// each time multiply temp by p
$temp = $temp * $p;
}
return $ans;
}
// Driver function
echo PowerOFPINnfactorial(4, 2) . "\n";
// This code is contributed
// by Akanksha Rai(Abby_akku)
?>
<script>
// Javascript implementation of
// finding power of p in n!
// Returns power of p in n!
function PowerOFPINnfactorial(n, p)
{
// initializing answer
let ans = 0;
// initializing
let temp = p;
// loop until temp<=n
while (temp <= n)
{
// add number of numbers divisible by n
ans += n / temp;
// each time multiply temp by p
temp = temp * p;
}
return ans;
}
// Driver function
document.write(PowerOFPINnfactorial(4, 2));
// This code is contributed by _saurabh_jaiswal
</script>
//function to find the power of p in n! in Kotlin
fun PowerOFPINnfactorial(n: Int, p: Int)
{
// initializing answer
var ans = 0;
// initializing
var temp = p;
// loop until temp<=n
while(temp<=n)
{
// add number of numbers divisible by temp
ans+=n/temp;
// each time multiply temp by p
temp*=p;
}
println(ans)
}
//Driver Code
fun main(args: Array<String>)
{
val n = 4
val p = 2
PowerOFPINnfactorial(n,p)
}
Output:
3
Time Complexity :O(
Auxiliary Space: O(1)