Smallest number divisible by first n numbers
Last Updated :
30 Dec, 2022
Given a number n find the smallest number evenly divisible by each number 1 to n.
Examples:
Input : n = 4
Output : 12
Explanation : 12 is the smallest numbers divisible
by all numbers from 1 to 4
Input : n = 10
Output : 2520
Input : n = 20
Output : 232792560
If you observe carefully the ans must be the LCM of the numbers 1 to n.
To find LCM of numbers from 1 to n –
- Initialize ans = 1.
- Iterate over all the numbers from i = 1 to i = n.
At the i’th iteration ans = LCM(1, 2, …….., i). This can be done easily as LCM(1, 2, …., i) = LCM(ans, i).
Thus at i’th iteration we just have to do –
ans = LCM(ans, i)
= ans * i / gcd(ans, i) [Using the below property,
a*b = gcd(a,b) * lcm(a,b)]
-
Note : In C++ code, the answer quickly exceeds the integer limit, even the long long limit.
Below is the implementation of the logic.
C++
#include<bits/stdc++.h>
using namespace std;
long long lcm( long long n)
{
long long ans = 1;
for ( long long i = 1; i <= n; i++)
ans = (ans * i)/(__gcd(ans, i));
return ans;
}
int main()
{
long long n = 20;
cout << lcm(n);
return 0;
}
|
Java
class GFG{
static long gcd( long a, long b)
{
if (a%b != 0 )
return gcd(b,a%b);
else
return b;
}
static long lcm( long n)
{
long ans = 1 ;
for ( long i = 1 ; i <= n; i++)
ans = (ans * i)/(gcd(ans, i));
return ans;
}
public static void main(String []args)
{
long n = 20 ;
System.out.println(lcm(n));
}
}
|
C#
using System;
public class GFG{
static long gcd( long a, long b)
{
if (a%b != 0)
return gcd(b,a%b);
else
return b;
}
static long lcm( long n)
{
long ans = 1;
for ( long i = 1; i <= n; i++)
ans = (ans * i)/(gcd(ans, i));
return ans;
}
static public void Main (){
long n = 20;
Console.WriteLine(lcm(n));
}
}
|
Python3
import math
def lcm(n):
ans = 1
for i in range ( 1 , n + 1 ):
ans = int ((ans * i) / math.gcd(ans, i))
return ans
n = 20
print (lcm(n))
|
PHP
<?php
function lcm( $n )
{
$ans = 1;
for ( $i = 1; $i <= $n ; $i ++)
$ans = ( $ans * $i ) / (gmp_gcd( strval (ans),
strval (i)));
return $ans ;
}
$n = 20;
echo lcm( $n );
?>
|
Javascript
<script>
function gcd(a, b)
{
if (a%b != 0)
return gcd(b,a%b);
else
return b;
}
function lcm(n)
{
let ans = 1;
for (let i = 1; i <= n; i++)
ans = (ans * i)/(gcd(ans, i));
return ans;
}
let n = 20;
document.write(lcm(n));
</script>
|
Time Complexity: O(n log2n) as the complexity of _gcd(a,b) in c++ is log2n and that is running n times in a loop.
Auxiliary Space: O(1)
The above solution works fine for a single input. But if we have multiple inputs, it is a good idea to use Sieve of Eratosthenes to store all prime factors. Please refer below article for Sieve based approach.
LCM of First n Natural Numbers
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...