# Highest power of 2 that divides the LCM of first N Natural numbers.

• Last Updated : 17 Nov, 2021

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 22

Input: 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++

 // C++ implementation of the approach   #include 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

 // 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

 # 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#

 // 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

## Javascript



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++

 // C++ implementation of the approach   #include 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

 // 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

 # 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#

 // 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

## Javascript



Output

3

Time Complexity: O(1)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :