Linear Diophantine Equations

• Difficulty Level : Medium
• Last Updated : 31 Mar, 2021

A Diophantine equation is a polynomial equation, usually in two or more unknowns, such that only the integral solutions are required. An Integral solution is a solution such that all the unknown variables take only integer values.
Given three integers a, b, c representing a linear equation of the form : ax + by = c. Determine if the equation has a solution such that x and y are both integral values.
Examples :

Input : a = 3, b = 6, c = 9
Output: Possible
Explanation : The Equation turns out to be,
3x + 6y = 9 one integral solution would be
x = 1 , y = 1

Input : a = 3, b = 6, c = 8
Output : Not Possible
Explanation : o integral values of x and y
exists that can satisfy the equation 3x + 6y = 8

Input : a = 2, b = 5, c = 1
Output : Possible
Explanation : Various integral solutions
possible are, (-2,1) , (3,-1) etc.

Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Solution:
For linear Diophantine equation equations, integral solutions exist if and only if, the GCD of coefficients of the two variables divides the constant term perfectly. In other words the integral solution exists if, GCD(a ,b) divides c.
Thus the algorithm to determine if an equation has integral solution is pretty straightforward.

• Find GCD of a and b
• Check if c % GCD(a ,b) ==0
• If yes then print Possible
• Else print Not Possible

Below is the implementation of above approach.

C++

 // C++ program to check for solutions of diophantine// equations#include using namespace std; //utility function to find the GCD of two numbersint gcd(int a, int b){    return (a%b == 0)? abs(b) : gcd(b,a%b);} // This function checks if integral solutions are// possiblebool isPossible(int a, int b, int c){    return (c%gcd(a,b) == 0);} //driver functionint main(){    // First example    int a = 3, b = 6, c = 9;    isPossible(a, b, c)? cout << "Possible\n" :                        cout << "Not Possible\n";     // Second example    a = 3, b = 6, c = 8;    isPossible(a, b, c)? cout << "Possible\n" :                       cout << "Not Possible\n";     // Third example    a = 2, b = 5, c = 1;    isPossible(a, b, c)? cout << "Possible\n" :                       cout << "Not Possible\n";     return 0;}

Java

 // Java program to check for solutions of// diophantine equationsimport java.io.*; class GFG {         // Utility function to find the GCD    // of two numbers    static int gcd(int a, int b)    {        return (a % b == 0) ?                Math.abs(b) : gcd(b,a%b);    }         // This function checks if integral    // solutions are possible    static boolean isPossible(int a,                            int b, int c)    {        return (c % gcd(a, b) == 0);    }         // Driver function    public static void main (String[] args)    {        // First example        int a = 3, b = 6, c = 9;        if(isPossible(a, b, c))            System.out.println( "Possible" );        else            System.out.println( "Not Possible");             // Second example        a = 3; b = 6; c = 8;        if(isPossible(a, b, c))            System.out.println( "Possible") ;        else            System.out.println( "Not Possible");             // Third example        a = 2; b = 5; c = 1;        if(isPossible(a, b, c))            System.out.println( "Possible" );        else            System.out.println( "Not Possible");    }} // This code is contributed by anuj_67.

Python3

 # Python 3 program to check for solutions# of diophantine equationsfrom math import gcd # This function checks if integral# solutions are possibledef isPossible(a, b, c):    return (c % gcd(a, b) == 0) # Driver Codeif __name__ == '__main__':         # First example    a = 3    b = 6    c = 9    if (isPossible(a, b, c)):        print("Possible")    else:        print("Not Possible")     # Second example    a = 3    b = 6    c = 8    if (isPossible(a, b, c)):        print("Possible")    else:        print("Not Possible")     # Third example    a = 2    b = 5    c = 1    if (isPossible(a, b, c)):        print("Possible")    else:        print("Not Possible")         # This code is contributed by# Surendra_Gangwar

C#

 // C# program to check for// solutions of diophantine// equationsusing System; class GFG{         // Utility function to find    // the GCD of two numbers    static int gcd(int a, int b)    {        return (a % b == 0) ?                Math.Abs(b) :               gcd(b, a % b);    }         // This function checks    // if integral solutions    // are possible    static bool isPossible(int a,                           int b,                           int c)    {        return (c % gcd(a, b) == 0);    }         // Driver Code    public static void Main ()    {        // First example        int a = 3, b = 6, c = 9;        if(isPossible(a, b, c))            Console.WriteLine("Possible");        else            Console.WriteLine("Not Possible");             // Second example        a = 3; b = 6; c = 8;        if(isPossible(a, b, c))            Console.WriteLine("Possible") ;        else            Console.WriteLine("Not Possible");             // Third example        a = 2; b = 5; c = 1;        if(isPossible(a, b, c))            Console.WriteLine("Possible");        else            Console.WriteLine("Not Possible");    }} // This code is contributed by anuj_67.



Javascript



Output :

Possible
Not Possible
Possible

How does this work?
Let GCD of ‘a’ and ‘b’ be ‘g’. g divides a and b. This implies g also divides (ax + by) (if x and y are integers). This implies gcd also divides ‘c’ using the relation that ax + by = c. Refer this wiki link for more details.