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

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

Output:
```3
```

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

Output:
```3
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

Article Tags :
Practice Tags :