C++ Program to Calculate the LCM and HCF (GCD) of Two Numbers

In this article, you will learn and get code to find and print the LCM and HCF (GCD) of any given two numbers given by the user at run-time in C++. Here is the list of programs you will go through:

How do LCM and HCF get calculated?

Before going through the programs listed above, if you're not aware of how the LCM or HCF of two numbers gets calculated, then you can refer to these articles:

to clear all your doubts about LCM and HCF. Now let's move on to the program.

Determine the LCM of Two Numbers in C++

To find the LCF of two numbers in C++ programming, you have to ask the user to enter the two numbers. Then find and print its LCM on the output, as shown in the program given below.

Note: LCM is the Lowest Common Multiple (or Least Common Divisor). For example, if there are two numbers, say 10 and 12, then their least common divisor is 60. That is, both numbers 10 and 12 divide 60 without leaving any remainder (or leaving 0 as a remainder).

#include<iostream>
using namespace std;
int main()
{
    intnumOne, numTwo, mp;
    cout<<"Enter Two Numbers: ";
    cin>>numOne>>numTwo;
    if(numOne>numTwo)
        mp = numOne;
    else
        mp = numTwo;
    while(1)
    {
        if((mp%numOne == 0) && (mp%numTwo == 0))
            break;
        else
            mp++;
    }
    cout<<"\nLCM ("<<numOne<<", "<<numTwo<<") = "<<mp;
    cout<<endl;
    return 0;
}

This program was built and runs under the Code::Blocks IDE. Here is its sample run:

C++ program find hcf lcm

Now supply any two numbers, say 2 and 3. Press the ENTER key to find and print its LCM, as shown in the output given below:

c++ find lcm of two numbers

Note: 6 is the lowest number that is completely divisible by both 2 and 3.

Here is another sample run with user input: 4, 5:

find lcm of two numbers c++

The main logic behind the above program is:

The dry run of the above program with user inputs 2 and 3 goes like this:

C++ Determine the HCF (GCD) of Two Numbers

Unlike LCM, which deals with multiples (the lowest common), HCM deals with factors (the highest common). HCF can be called the "highest common factor" (HCF) or "greatest common factor" (GCF).

For example, if there are two numbers, say 10 and 12, then their highest common factor is 2. That is, 2 is the highest number that divides both numbers. 1 also divides both numbers, but 2 is greater, so 2 is the HCF of 10 and  12.

The question is, "Write a program in C++ that finds the HCF of two numbers." Here is its answer:

#include<iostream>
using namespace std;
int main()
{
    intnumOne, numTwo, mp;
    cout<<"Enter Two Numbers: ";
    cin>>numOne>>numTwo;
    if(numOne<numTwo)
        mp = numOne;
    else
        mp = numTwo;
    while(1)
    {
        if((numOne%mp == 0) && (numTwo%mp == 0))
            break;
        else
            mp--;
    }
    cout<<"\nHCF ("<<numOne<<", "<<numTwo<<") = "<<mp;
    cout<<endl;
    return 0;
}

Here is its sample run with user input (2 and 3):

find hcf of two numbers c++

Note: Because 1 is the highest positive integer that divides both the numbers 2 and 3, therefore, 1 is the HCF of 2 and 3.

Take note that the highest positive integer must be less than the smaller of the two numbers given.

Here is another sample run with user input, 18 and 27:

find gcd of two numbers c++

Because 9 is the highest positive integer that divides both the numbers 18 and 27.

The logic used here is a little similar to the previous program on LCM of two numbers. The difference is in the condition and the update of the mp variable. That is, instead of incrementing it, decrement its value every time you enter the loop. And the condition gets changed with:

if((numOne%mp == 0) && (numTwo%mp == 0))

C++ LCM and HCF in One Program

This C++ program receives two numbers from the user and finds both LCM and HCF.

#include<iostream>
using namespace std;
int main()
{
    intnumOne, numTwo, lcm, hcf, a, b, temp;
    cout<<"Enter Two Numbers: ";
    cin>>numOne>>numTwo;
    a = numOne;
    b = numTwo;
    while(b!=0)
    {
        temp = b;
        b = a%b;
        a = temp;
    }
    hcf = a;
    lcm = (numOne*numTwo)/hcf;
    cout<<"\nLCM ("<<numOne<<", "<<numTwo<<") = "<<lcm;
    cout<<"\nHCF ("<<numOne<<", "<<numTwo<<") = "<<hcf;
    cout<<endl;
    return 0;
}

Here is its sample run with user input: 9, 8:

find lcm hcf of two numbers c++

In C++, find the LCM and HCF of two numbers using a for loop

Now let's create the same program using the for loop.

#include<iostream>
using namespace std;
int main()
{
    intnumOne, numTwo, mp, temp;
    cout<<"Enter Two Numbers: ";
    cin>>numOne>>numTwo;
    if(numOne>numTwo)
        mp = numOne;
    else
        mp = numTwo;
    temp = mp;
    for(;;mp++)
    {
        if((mp%numOne == 0) && (mp%numTwo == 0))
            break;
    }
    cout<<"\nLCM ("<<numOne<<", "<<numTwo<<") = "<<mp;
    mp = temp;
    for(;;mp--)
    {
        if((numOne%mp == 0) && (numTwo%mp == 0))
            break;
    }
    cout<<"\nHCF ("<<numOne<<", "<<numTwo<<") = "<<mp;
    cout<<endl;
    return 0;
}

Here is a sample run with user input: 10 and 12.

find lcm hcf using for loop c++

NoteThe initialization part (first part) and condition-checking part (second part) of the for loop are hidden. Leaving the condition empty always evaluates to a true condition.

In C++, find the LCM and HCF of two numbers using a user-defined function

This program uses two user-defined functions, namely, findLCM() and findHCF(), to find the LCM and HCF of two numbers entered by the user.

Both functions accept two arguments, a first and second number, and return the LCM or HCF of the two numbers.

#include<iostream>
using namespace std;
int findLCM(int, int);
int findHCF(int, int);
int main()
{
    intnumOne, numTwo, res;
    cout<<"Enter Two Numbers: ";
    cin>>numOne>>numTwo;
    res = findLCM(numOne, numTwo);
    cout<<"\nLCM ("<<numOne<<", "<<numTwo<<") = "<<res;
    res = findHCF(numOne, numTwo);
    cout<<"\nHCF ("<<numOne<<", "<<numTwo<<") = "<<res;
    cout<<endl;
    return 0;
}
int findLCM(int a, int b)
{
    intlcm;
    if(a>b)
        lcm = a;
    else
        lcm = b;
    while(1)
    {
        if((lcm%a == 0) && (lcm%b == 0))
            break;
        lcm++;
    }
    return lcm;
}
int findHCF(int a, int b)
{
    inthcf;
    if(a>b)
        hcf = a;
    else
        hcf = b;
    while(1)
    {
        if((a%hcf == 0) && (b%hcf == 0))
            break;
        hcf--;
    }
    return hcf;
}

Here is its sample run with user input: 6 and 8.

find lcm hcf using function

The same program in different languages

C++ Quiz


« Previous Program Next Program »