Open In App

Find x and y satisfying ax + by = n

Improve
Improve
Like Article
Like
Save
Share
Report

Given a, b and n. Find x and y that satisfies ax + by = n. Print any of the x and y satisfying the equation
Examples : 
 

Input : n=7 a=2 b=3
Output : x=2, y=1 
Explanation: here x and y satisfies the equation

Input : 4 2 7 
Output : No Solution Exists

We can check if any solutions exists or not using Linear Diophantine Equations, but here we need to find out the solutions for this equation, we can simply iterate for all possible values from 0 to n as it cannot exceed n for this given equation. So solving this equation with pen and paper gives y=(n-ax)/b and similarly we get the other number to be x=(n-by)/a. But this way we would get only positive solution for x and y may be positive or negative depends on sign of b.

using Linear Diophantine Equation, we can say “no solution”  only when GCD(a, b) would not be a divisor of n. otherwise, solution exists.
 

C++14




// CPP program to find solution of ax + by = n
#include <bits/stdc++.h>
using namespace std;
 
// function to find the solution
int gcd(int a, int b,int &x, int &y){
    if(b == 0){
        x= 1; y = 0;
        return a;
    }
    int x1, y1;
    int d = gcd(b, a%b, x1, y1);
    x = y1;
    y = x1 - y1*(a/b);
    return d;
}
void solution(int a, int b, int n)
{
    int x0, y0;
    int g = gcd(a, b, x0, y0);
    if(n%g != 0){
        cout<<"No Solution Exists"<<endl;
        return;
    }
    x0 = x0*n/g;
    y0 = y0*n/g;
    // single valid answer
    cout<<"x = "<<x0<<", y = "<<y0<<endl;
 
    // other valid answers can be obtained through...
    // x = x0 + k*(b/g)
    // y = y0 - k*(a/g)
    for(int k = -3; k <= 3; k++){
        int x = x0 + k*(b/g);
        int y = y0 - k*(a/g);
        cout<<"x = "<<x<<", y = "<<y<<endl;
    }
}
 
// driver program to test the above function
int main()
{
    int a = 2, b = 3, n = 7;
        solution(a, b, n);
    return 0;
}


Java




// Java program to find solution
// of ax + by = n
import java.io.*;
 
class GfG {
         
    // function to find the solution
    static void solution(int a, int b, int n)
    {
        // traverse for all possible values
        for (int i = 0; i * a <= n; i++)
        {
     
            // check if it is satisfying the equation
            if ((n - (i * a)) % b == 0)
            {
                System.out.println("x = " + i +
                                   ", y = " +
                                   (n - (i * a)) / b);
                 
                return ;
            }
        }
     
        System.out.println("No solution");
    }
     
     
    public static void main (String[] args)
    {
        int a = 2, b = 3, n = 7;
        solution(a, b, n);
     
    }
}
 
// This code is contributed by Gitanjali.


Python3




# Python3 code to find solution of
# ax + by = n
 
# function to find the solution
def solution (a, b, n):
 
    # traverse for all possible values
    i = 0
    while i * a <= n:
         
        # check if it is satisfying
        # the equation
        if (n - (i * a)) % b == 0:
            print("x = ",i ,", y = ",
               int((n - (i * a)) / b))
            return 0
        i = i + 1
     
    print("No solution")
 
# driver program to test the above function
a = 2
b = 3
n = 7
solution(a, b, n)
 
# This code is contributed by "Sharad_Bhardwaj".


C#




// C# program to find solution
// of ax + by = n
using System;
 
class GfG {
         
    // function to find the solution
    static void solution(int a, int b, int n)
    {
         
        // traverse for all possible values
        for (int i = 0; i * a <= n; i++)
        {
     
            // check if it is satisfying the
            // equation
            if ((n - (i * a)) % b == 0)
            {
                Console.Write("x = " + i +
                                ", y = " +
                        (n - (i * a)) / b);
                 
                return ;
            }
        }
     
        Console.Write("No solution");
    }
     
    // Driver code
    public static void Main ()
    {
        int a = 2, b = 3, n = 7;
        solution(a, b, n);
     
    }
}
 
// This code is contributed by Vt_m.


PHP




<?php
// PHP program to find
// solution of ax + by = n
 
// function to find the solution
function solution($a, $b, $n)
{
    // traverse for all possible values
    for ($i = 0; $i * $a <= $n; $i++)
    {
 
        // check if it is satisfying
        // the equation
        if (($n - ($i * $a)) % $b == 0)
        {
            echo "x = " , $i , ", y = " ,
                   ($n - ($i * $a)) / $b;
            return;
        }
    }
 
    echo "No solution";
}
 
// Driver Code
$a = 2; $b = 3; $n = 7;
solution($a, $b, $n);
 
// This code is contributed by anuj_67.
?>


Javascript




<script>
 
// JavaScript program to find solution
// of ax + by = n
 
    // function to find the solution
    function solution(a, b, n)
    {
        // traverse for all possible values
        for (let i = 0; i * a <= n; i++)
        {
       
            // check if it is satisfying the equation
            if ((n - (i * a)) % b == 0)
            {
                document.write("x = " + i +
                                   ", y = " +
                                   (n - (i * a)) / b);
                   
                return ;
            }
        }
       
        document.write("No solution");
    }
 
// Driver code
 
        let a = 2, b = 3, n = 7;
        solution(a, b, n);
          
         // This code is contributed by sanjoy_62.
</script>


Output

x = -7, y = 7
x = -16, y = 13
x = -13, y = 11
x = -10, y = 9
x = -7, y = 7
x = -4, y = 5
x = -1, y = 3
x = 2, y = 1

Time Complexity: O(log(min(a, b))), as we are using a Euclid gcd function.
Auxiliary Space: O(1), since no extra space has been taken.

The above written code is not handling base cases.

when n=0, a= 0, b= 0 [ ans = infinite solution ]

when n != 0, a = 0 , b = 0 [ ans = no solution ]

when n = 0, a != 0 , b!=0 [ ans = one solution exists ]



Last Updated : 02 Jan, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads