Open In App

# Program to balance the given Chemical Equation

Given the values x, y, p, q of a simple chemical equation of the type:

The task is to find the values of constants b1, b2, b3 such that the equation is balanced on both sides and it must be the reduced form.

Examples:

Input: x = 2, y = 3, p = 4, q = 5
Output: b1 = 6, b2 = 5, b3 = 3

Input: x = 1, y = 2, p = 3, q = 1
Output: b1 = 6, b2 = 1, b3 = 2

Approach:

1. Check if p % x = 0 and q % y = 0 or not.

2. If yes, then we can simply say that

b1 = p / x,
b2 = q / y, and
b3 = 1

3. Else we need to use gcd to compute b1, b2, b3. We need the reduced form so gcd can help with it.

Below is the implementation of the above approach.

## C++

 // C++ program to balance// the given Chemical Equation#include using namespace std; // Function to calculate GCDint gcd(int a, int b){    if (b == 0)        return a;    return gcd(b, a % b);} // Function to calculate b1, b2 and b3void balance(int x, int y, int p, int q){    // Variable declaration    int b1, b2, b3;     if (p % x == 0 && q % y == 0) {        b1 = p / x;        b2 = q / y;        b3 = 1;    }     else {        p = p * y;        q = q * x;        b3 = x * y;         // temp variable to store gcd        int temp = gcd(p, gcd(q, b3));         // Computing GCD        b1 = p / temp;        b2 = q / temp;        b3 = b3 / temp;    }     cout << b1 << " " << b2         << " " << b3 << endl;} // Driver codeint main(){    int x = 2, y = 3, p = 4, q = 5;     balance(x, y, p, q);}

## Java

 // Java program to balance// the given Chemical Equation import java.util.*; class GFG{  // Function to calculate GCDstatic int gcd(int a, int b){    if (b == 0)        return a;    return gcd(b, a % b);}  // Function to calculate b1, b2 and b3static void balance(int x, int y, int p, int q){    // Variable declaration    int b1, b2, b3;      if (p % x == 0 && q % y == 0) {        b1 = p / x;        b2 = q / y;        b3 = 1;    }      else {        p = p * y;        q = q * x;        b3 = x * y;          // temp variable to store gcd        int temp = gcd(p, gcd(q, b3));          // Computing GCD        b1 = p / temp;        b2 = q / temp;        b3 = b3 / temp;    }      System.out.print(b1 + " " +  b2        + " " +  b3 +"\n");}  // Driver codepublic static void main(String[] args){    int x = 2, y = 3, p = 4, q = 5;      balance(x, y, p, q);}} // This code contributed by Rajput-Ji

## Python3

 # Python 3 program to balance# the given Chemical Equation # Function to calculate GCDdef gcd(a,b):    if (b == 0):        return a    return gcd(b, a % b) # Function to calculate b1, b2 and b3def balance(x, y, p, q):     # Variable declaration    if (p % x == 0 and q % y == 0):        b1 = p // x        b2 = q // y        b3 = 1     else:        p = p * y        q = q * x        b3 = x * y         # temp variable to store gcd        temp = gcd(p, gcd(q, b3))         # Computing GCD        b1 = p // temp        b2 = q // temp        b3 = b3 // temp     print(b1,b2,b3) # Driver codeif __name__ == '__main__':    x = 2    y = 3    p = 4    q = 5     balance(x, y, p, q) # This code is contributed by Surendra_Gangwar

## C#

 // C# program to balance// the given Chemical Equation using System; public class GFG{ // Function to calculate GCDstatic int gcd(int a, int b){    if (b == 0)        return a;    return gcd(b, a % b);} // Function to calculate b1, b2 and b3static void balance(int x, int y, int p, int q){    // Variable declaration    int b1, b2, b3;     if (p % x == 0 && q % y == 0) {        b1 = p / x;        b2 = q / y;        b3 = 1;    }     else {        p = p * y;        q = q * x;        b3 = x * y;         // temp variable to store gcd        int temp = gcd(p, gcd(q, b3));         // Computing GCD        b1 = p / temp;        b2 = q / temp;        b3 = b3 / temp;    }     Console.Write(b1 + " " + b2                  + " " + b3 +"\n");} // Driver codepublic static void Main(String[] args){    int x = 2, y = 3, p = 4, q = 5;     balance(x, y, p, q);}} // This code is contributed by Rajput-Ji

## Javascript

 

Output:

6 5 3

Time Complexity: O(log(max(a, b)))

Auxiliary Space: O(log(max(a, b)))