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