Given a number N, the task is to find the largest power of 2 that divides LCM of first N Natural numbers.
Examples:
Input: N = 5
Output: 2
Explanation:
LCM of {1, 2, 3, 4, 5} = 60
60 is divisible by 22Input: N = 15
Output: 3
Explanation:
LCM of {1, 2, 3…..14, 15} = 360360
360360 is divisible by 23
Naive Approach: The idea is to find the Least common multiple of first N natural numbers. Then iterate a loop from i = 1 and check if 2i Divides the LCM or not and keep the track of maximum i that divides LCM.
Below is the implementation of the above approach:
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to find LCM of // first N natural numbers int findlcm( int n)
{ // Initialize result
int ans = 1;
// Ans contains LCM of 1, 2, 3, ..i
// after i'th iteration
for ( int i = 1; i <= n; i++)
ans = (((i * ans)) / (__gcd(i, ans)));
return ans;
} // Function to find the // highest power of 2 // which divides LCM of // first n natural numbers int highestPower( int n)
{ // Find lcm of first
// N natural numbers
int lcm = findlcm(n);
// To store the highest
// required power of 2
int ans = 0;
// Counting number of consecutive zeros
// from the end in the given binary string
for ( int i = 1;; i++) {
int x = pow (2, i);
if (lcm % x == 0) {
ans = i;
}
if (x > n)
break ;
}
return ans;
} // Driver code int main()
{ int n = 15;
cout << highestPower(n);
return 0;
} |
// Java implementation of the approach import java.util.*;
class GFG{
// Function to find LCM of // first N natural numbers static int findlcm( int n)
{ // Initialize result
int ans = 1 ;
// Ans contains LCM of 1, 2, 3, ..i
// after i'th iteration
for ( int i = 1 ; i <= n; i++)
ans = (((i * ans)) / (__gcd(i, ans)));
return ans;
} // Function to find the // highest power of 2 // which divides LCM of // first n natural numbers static int highestPower( int n)
{ // Find lcm of first
// N natural numbers
int lcm = findlcm(n);
// To store the highest
// required power of 2
int ans = 0 ;
// Counting number of consecutive zeros
// from the end in the given binary String
for ( int i = 1 ;; i++)
{
int x = ( int ) Math.pow( 2 , i);
if (lcm % x == 0 )
{
ans = i;
}
if (x > n)
break ;
}
return ans;
} static int __gcd( int a, int b)
{ return b == 0 ? a : __gcd(b, a % b);
} // Driver code public static void main(String[] args)
{ int n = 15 ;
System.out.print(highestPower(n));
} } // This code is contributed by 29AjayKumar |
# Python3 implementation of the approach # Function to find LCM of # first N natural numbers def findlcm(n):
# Initialize result
ans = 1 ;
# Ans contains LCM of 1, 2, 3, ..i
# after i'th iteration
for i in range ( 1 , n + 1 ):
ans = (((i * ans)) / /
(__gcd(i, ans)));
return ans;
# Function to find the highest power # of 2 which divides LCM of first n # natural numbers def highestPower(n):
# Find lcm of first
# N natural numbers
lcm = findlcm(n);
# To store the highest
# required power of 2
ans = 0 ;
# Counting number of consecutive zeros
# from the end in the given binary String
for i in range ( 1 , n):
x = int ( pow ( 2 , i));
if (lcm % x = = 0 ):
ans = i;
if (x > n):
break ;
return ans;
def __gcd(a, b):
if (b = = 0 ):
return a;
else :
return __gcd(b, a % b);
# Driver code if __name__ = = '__main__' :
n = 15 ;
print (highestPower(n));
# This code is contributed by 29AjayKumar |
// C# implementation of the approach using System;
class GFG{
// Function to find LCM of // first N natural numbers static int findlcm( int n)
{ // Initialize result
int ans = 1;
// Ans contains LCM of 1, 2, 3, ..i
// after i'th iteration
for ( int i = 1; i <= n; i++)
ans = (((i * ans)) /
(__gcd(i, ans)));
return ans;
} // Function to find the // highest power of 2 // which divides LCM of // first n natural numbers static int highestPower( int n)
{ // Find lcm of first
// N natural numbers
int lcm = findlcm(n);
// To store the highest
// required power of 2
int ans = 0;
// Counting number of consecutive zeros
// from the end in the given binary String
for ( int i = 1;; i++)
{
int x = ( int ) Math.Pow(2, i);
if (lcm % x == 0)
{
ans = i;
}
if (x > n)
break ;
}
return ans;
} static int __gcd( int a, int b)
{ return b == 0 ? a : __gcd(b, a % b);
} // Driver code public static void Main(String[] args)
{ int n = 15;
Console.Write(highestPower(n));
} } // This code is contributed by 29AjayKumar |
<script> // JavaScript program for the // above approach // Function to find LCM of // first N natural numbers function findlcm(n)
{ // Initialize result
let ans = 1;
// Ans contains LCM of 1, 2, 3, ..i
// after i'th iteration
for (let i = 1; i <= n; i++)
ans = (((i * ans)) / (__gcd(i, ans)));
return ans;
} // Function to find the // highest power of 2 // which divides LCM of // first n natural numbers function highestPower(n)
{ // Find lcm of first
// N natural numbers
let lcm = findlcm(n);
// To store the highest
// required power of 2
let ans = 0;
// Counting number of consecutive zeros
// from the end in the given binary String
for (let i = 1;; i++)
{
let x = Math.pow(2, i);
if (lcm % x == 0)
{
ans = i;
}
if (x > n)
break ;
}
return ans;
} function __gcd(a, b)
{ return b == 0 ? a : __gcd(b, a % b);
} // Driver Code let n = 15;
document.write(highestPower(n));
</script> |
Output
3
Time Complexity: O(N)
Auxiliary Space: O(1)
Efficient Approach: The LCM of first N natural numbers is always divisible by a power of 2 and since the LCM of first N natural numbers contains the product 2 * 4 * 8 * 16 ……N. Therefore, the largest power of 2 that divides LCM of first N Natural numbers will always be
Below is the implementation of the above approach:
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to find the // highest power of 2 // which divides LCM of // first n natural numbers int highestPower( int n)
{ return log (n) / log (2);
} // Driver code int main()
{ int n = 15;
cout << highestPower(n);
return 0;
} |
// Java implementation of the approach class GFG{
// Function to find the highest // power of 2 which divides LCM of // first n natural numbers static int highestPower( int n)
{ return ( int )(Math.log(n) / Math.log( 2 ));
} // Driver code public static void main(String[] args)
{ int n = 15 ;
System.out.println(highestPower(n));
} } // This code is contributed by dewantipandeydp |
# Python3 implementation of the approach import math
# Function to find the highest # power of 2 which divides LCM of # first n natural numbers def highestPower(n):
return int ((math.log(n) / / math.log( 2 )));
# Driver code if __name__ = = '__main__' :
n = 15 ;
print (highestPower(n));
# This code is contributed by Rajput-Ji |
// C# implementation of the approach using System;
class GFG{
// Function to find the highest // power of 2 which divides LCM of // first n natural numbers static int highestPower( int n)
{ return ( int )(Math.Log(n) / Math.Log(2));
} // Driver code public static void Main(String[] args)
{ int n = 15;
Console.WriteLine(highestPower(n));
} } // This code is contributed by sapnasingh4991 |
<script> // Javascript implementation of the approach // Function to find the // highest power of 2 // which divides LCM of // first n natural numbers function highestPower(n)
{ return parseInt(Math.log(n) / Math.log(2));
} // Driver code var n = 15;
document.write( highestPower(n)); </script> |
Output
3
Time Complexity: O(1)
Auxiliary Space: O(1)