×

LCM Program in Java

LCM Program in Java

The LCM program in Java outputs the LCM of the given numbers. In Arithmetic, the lowest common multiple, least common multiple or smallest common multiple of the two numbers p and q are represented by LCM(p, q). It is a lowest positive number that is completely divisible by the numbers p and q. Since, the division of any number by zero is undefined, therefore, the definition of LCM only holds true when both the numbers p and q are not equal to zero. Let’s discuss different approaches to find LCM.

Using the Java for Loop

Filename: LCMExample.java

public class LCMExample
{             
public static void main(String argvs[])
{
               int a = 78, b = 117; // Given numbers
               int ans; // contains LCM of the given numbers
               // finding maximum between the given numbers.
               ans = ( a > b) ? a : b;
               // finding LCM
               for( ; ; )
               {
                   if(ans % a == 0 && ans % b == 0)
                   {
                       // We found our LCM.
                       // No need to check further.
                       break;
                   }
                   // Increamenting by 1.
                   ans = ans + 1;
               }
               // Displaying result
               System.out.println("The LCM of the numbers " + a + " and " + b + " is " + ans);
}
} 

Output:

The LCM of the numbers 78 and 117 is 234

Explanation: The LCM of any two numbers is always greater than or equal largest of the given numbers. Therefore, we have assigned the largest of the given two numbers in ans variable. Since, there is no condition in the for loop, it is evaluated true. In each iteration, we are incrementing the ans variable by 1 and checking whether the updated ans value is completely divisible by the given numbers or not. If it is divisible, we forcefully terminate the loop using the break statement; otherwise, the iteration continues.

Using Multiples of the Given Numbers

In this approach, we find the multiples of the given numbers and then find the smallest multiple, which is common in both the given numbers. The smallest common multiple is answer. Let’s understand it with the help of an example.

The LCM of 9 and 12 will be:

Multiples of 9: 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108, 117, 126, 135, 144, 153, …

Multiples of 12: 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144, 156, 168, 180, 192, …

Common multiples are: 36, 72, 108, 144

Lowest Common Multiple is 36. Hence, LCM(9, 12) = 36.

Filename: LCMExample1.java

import java.util.List;
import java.util.ArrayList;
public class LCMExample1
{
public static void main(String argvs[])
{
               int a = 78, b = 117; // Given numbers
               int ans = 0; // contains the LCM of the given numbers
               // List for storing multiples
               List<Integer> al1 =  new ArrayList<Integer>();
               List<Integer> al2 = new ArrayList<Integer>();
               // Finding and storing multiples of the given numbers
               for(int i = 1; i <= b; i++)
               {
                               // generating multiples in increasing order
                               int multiples = i * a;  
                               al1.add(multiples); // storing in the list
               }
               for(int i = 1; i <= a; i++)
               {
                               // generating multiples in increasing order
                               int multiples = i * b;
                               al2.add(multiples); // storing in the list
               }
               // Converting the lists into Integer arrays.
               Integer[] f1 = new Integer[al1.size()];
               f1 = al1.toArray(f1);
               Integer[] f2 = new Integer[al2.size()];
               f2 = al2.toArray(f2);
               // Two pointer approach to find the lowest multiple
               for(int i = f1.length - 1, j = f2.length - 1; i >= 0 && j >= 0;)
               {
                               if((int)f1[i] == (int)f2[j])
                               {
                                              ans = f1[i]; // updating our result
                                              i--;
                                              j--;
                               }
                               else if(f1[i] > f2[j])
                               {
                                              i--;
                               }
                               else
                               {
                                              j--;
                               }
               }
               System.out.println("The LCM of the numbers " + a + " and " + b + " is " + ans);
}             
} 

Output:

The LCM of the numbers 78 and 117 is 234

Explanation: In the above approach, we are finding and storing all the multiples of the first number till the second number and vice-versa. This is because LCM(a, b) <= a*b. Then we are converting the lists into integer arrays. The first integer array contains all the multiples of the first input number, and the second integer array contains the multiples of the second input number in ascending order. Finally, using the two-pointers approach, we are finding the LCM of the given numbers. This approach is not widely used because the numbers become large and finding the multiples of a large number takes a lot of time. Also, the two-pointers approach becomes time consuming.

Using GCD of the Given Numbers

In Mathematics, the multiplication of two numbers is always equal to the product of LCM and GCD of the numbers. That is,

a * b = LCM(a, b) * GCD(a, b)

Therefore,

LCM(a, b) =

The following program implements the above-written formula to get the LCM of the given numbers.

Filename: LCMExample2.java

public class LCMExample2
{
// Method for finding GCD of two numbers
public static int findGCD(int a, int b)
{
               // Base cases
               if(a == 0)
               {
                               return b;
               }
               if(b == 0)
               {
                               return a;
               }
               // recursively finding GCD
               return findGCD(b, a % b);
}
public static void main(String argvs[])
{
               int a = 78, b = 117; // Given numbers
               int ans; // contains LCM of the given numbers
               int product = a * b; // calculating product
               int gcd = findGCD(a, b); // invoking the method findGCD() and storing the result                    
               ans = product / gcd; // calculating LCM
               // Displaying result
               System.out.println("The LCM of the numbers " + a + " and " + b + " is " + ans);
}
} 

Output:

The LCM of the numbers 78 and 117 is 234

Explanation: In the above approach, first we calculate the product of the given numbers. Then using Euler’s algorithm, we are finding GCD. Finally, we are doing the division of the product of numbers and GCD of the given numbers to get the required LCM.

Finding LCM of more than two numbers

So far, we have only discussed the LCM of the two given numbers. However, it is also possible to find the LCM of more than two numbers. The following program illustrates the same.

Filename: LCMExample3.java

public class LCMExample3
{             
//Method implementing Euclid's algorithm
public static int findGCD(int n1, int n2)
{
               // base cases
               if(n1 == 0) return n2;
               if(n2 == 0) return n1;
               // recursively finding the GCD
               return findGCD(n2, n1 % n2);
}
public static void main(String argvs[])
{
               // input array
               int arr[] = {6, 10, 16, 28, 78, 90, 112, 188, 200, 290, 310, 444};
               int size = arr.length; // Calculating size of the input array
               // ans contains the LCM of the entire array
               // Initializing ans with the first element of the input array
               int ans = arr[0];
               for(int i = 1; i < size; i++)
               {
                              int product = ans * arr[i]; // calculating product
                              // invoking method fingGCD() and storing the result
                              int gcd = findGCD(ans, arr[i]);
                              ans = product / gcd; // updating our ans
               }
               // Displaying result
               System.out.println("The LCM of the given numbers is " + ans);
}
} 

Output:

The LCM of the given numbers is 161387600

Explanation: The above approach is similar to the previous one. The only difference is instead of two numbers, we have taken multiple numbers in an array. Therefore, we have used the Java for-loop to iterate over each element of the array to calculate the LCM of the whole array.

Finding LCM of Fractions

Not only numbers, but LCM of fractions can also be found. In Mathematics, the LCM of fractions is equal to the LCM of all the numerator numbers divided by the GCD of all the numbers of denominators. That is,

LCM( ,  =

The following Java program demonstrates the same.

Filename: LCMExample3.java

public class LCMExample3
{             
//Method implementing Euclid's algorithm
public static int findGCD(int n1, int n2)
{
               // base cases
               if(n1 == 0) return n2;
               if(n2 == 0) return n1;
               // recursively finding the GCD
               return findGCD(n2, n1 % n2);
}
public static void main(String argvs[])
{
               // input arrays
               // Array for numerators
               int numerators[] = {6, 10, 16, 28, 78, 90, 112, 188, 200, 290, 310, 444};
               // Array for denominators
               int denominators[] = {8, 4, 10, 36, 98, 112, 180, 198, 222, 788, 888, 990};
               int size = numerators.length; // Calculating size of the input arrays
               // lcmOfNum contains the LCM of all the numerators
               // Initializing lcmOfNum with the first element of the numerators array
               int lcmOfNum = numerators[0];
               // gcdOfDnm contains the GCD of all the denominators
               // Initializing gcdOfDnm with the first element of the denominators array
               int gcdOfDnm = denominators[0];
               // Loop for calculating LCM of numerators and GCD of denominators
               for(int i = 1; i < size; i++)
               {
                              int product = lcmOfNum * numerators[i]; // calculating product
                              // invoking method fingGCD() and
                               // storing the result
                              int gcdOfNum = findGCD(lcmOfNum, numerators[i]);
                              lcmOfNum = product / gcdOfNum; // updating our LCM of numerators
                               // calculating GCD of all the denominators
                              gcdOfDnm = findGCD(gcdOfDnm, denominators[i]);
               }
               int ans = lcmOfNum / gcdOfDnm; // calculating the final result
               // Displaying result
               System.out.println("The LCM of the given numbers is " + ans);
}
} 

Output:

The LCM of the given fractions is 80693800

Explanation: The two input arrays contain the numerators and denominators of the fractions. numerators[0] and denominators[0] constitute the first fraction ( . numerators[1] and denominators[1] constitute the second fraction ( , and so on. In a single Java for-loop, we are calculating the LCM for the numerators and GCD for the denominators. Finally, we are dividing the calculated LCM and GCD to get our result.

Comparison of The Above Approaches

Those approaches that do not include Euclid’s algorithm to find the LCM should be avoided if given liberty. We have already discussed that Euclid’s algorithm is the best algorithm to find the GCD. Also, we can easily find LCM if we know the GCD of the given numbers. Therefore, the use of Euler’s algorithm should be encouraged to find LCM. However, it is important to know all the mentioned approaches present in the section from the interview point of view.


Related Topics

Decagonal Numbers in Java

This section explains what is a decagonal number and how to write Java programmes that compute decagonal numbers. Both academics and Java programmer interviews regularly question about the Decagonal number...

3 minutes read.

Java Code Optimization

We encounter the idea of optimization while working on any Java application. It is essential that the code we write is not only clear and error-free but also optimized, meaning...

9 minutes read.

Hierarchy of operators in Java

Operators are the most frequently used terminology in any area of programming, and it helps in various approaches to efficiently solve daily life problems by computer programming. The simple addition of...

4 minutes read.

Java Math random() Method

The random() method of Math class returns a double value with a positive sign, less than 1 and greater than or equal to 0.0. This method is properly synchronized with...

1 minute read.

Bubble Sort in Java

Bubble Sort in Java Bubble sort isalso known as sinking sort. It is one of the simplest sorting algorithms. In the bubble sort algorithm, the given array is traversed from left...

5 minutes read.

How to generate random numbers in Java

Random numbers, also known as fake numbers, are actually a part of a very large sequence, so they are called random numbers. In a defined set of numbers, every number...

6 minutes read.

Intersection Point of two linked list in Java

In this article, you will be very well acknowledged about how to achieve the intersection point of two linked list in Java. There are several approaches to obtain. Surely each...

8 minutes read.

Awesome explanation of Strings in Java

What do you mean by String? Strings are a collection of characters that are commonly used in Java programming. Strings are regarded as objects in the Java programming language. “String” is a...

4 minutes read.

How to Convert long to String in Java

How to Convert long to String in java It is used if we have to display a long number in the text field because everything is displayed as a String. A...

3 minutes read.

Java Math.multiplyExact() method in Java

Java has an inbuilt math function called Math.multiplyExact() that returns the sum of the parameters. If the result exceeds an integer, an exception is thrown. There is no need to...

2 minutes read.

Flag Pattern in Java

The flag pattern in Java can be printed, which will be covered in this part. Given how difficult they are to code, flag patterns are rarely asked by interviewers. We separate...

2 minutes read.

What’s New in Java 15

Sealed classes are the new concept that was introduced by Java 15. Sealed classes are a preview feature. Most of the features which are released in java 15 are in...

3 minutes read.

Convert milliseconds to date in Java

In Java, we frequently need to convert milliseconds into Dates with several formats, including dd MM yyyy and dd MM yyyy HH:mm:ss:SSS Z, among others. The Date class is one of the most...

4 minutes read.

Minimum XOR value pair in Java

In this section, you will discuss about minimum XOR value pair in Java. The objective is to enforce a value that indicates the least XOR values of the two numbers from...

4 minutes read.

Armstrong Number Program in Java

Armstrong Number Program in Java: A positive number is called an Armstrong number if the sum of the cube of each digit is equal to the number itself. There are...

6 minutes read.

Narcissistic Number in Java

A Narcissistic number is made up of digits that have been added together and raised to powers equal to the number of digits in the original number. In those other...

3 minutes read.

TreeSet in Java

Java TreeSet with Example Java TreeSet implements the Navigable Set interface. It stores the objects in ascending order. It contains unique elements. Access and retrieval time is fast. It does not...

8 minutes read.

Java ResultSetMetaData

The data about another data is called Metadata. The ResultSetMetaData is used to store the data about ResultSet. The ResultSet Contains the columns, rows, names of table, datatypes etc. these...

2 minutes read.

How to Create an Object in Java

How to Create an Object in Java An object can be defined as a run time entity that contains the blue printof the class. It means that all the member functions...

5 minutes read.

How to Convert int to long in Java

How to Convert int to long in Java When two variables of different types are involved in the single expression, Java compiler uses built-in library function to convert the variable to...

2 minutes read.