Linear Diophantine Equations

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.
 
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++
Java
Python3
C#
PHP
Javascript
// C++ program to check for solutions of diophantine// equations#include <bits/stdc++.h>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 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.
# 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# 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.
<?php// PHP program to check for solutions of// diophantine equations // utility function to find the// GCD of two numbersfunction gcd($a, $b){    return ($a % $b == 0) ?                  abs($b) : gcd($b, $a % $b);} // This function checks if integral// solutions are possiblefunction isPossible($a, $b, $c){    return ($c % gcd($a, $b) == 0);} // Driver Code // First example$a = 3;$b = 6;$c = 9;if(isPossible($a, $b, $c) == true)    echo "Possible\n" ;else    echo "Not Possible\n"; // Second example$a = 3;$b = 6;$c = 8; if(isPossible($a, $b, $c) == true)    echo "Possible\n" ;else    echo "Not Possible\n"; // Third example$a = 2;$b = 5;$c = 1;if(isPossible($a, $b, $c) == true)    echo "Possible\n" ;else    echo "Not Possible\n"; // This code is contributed by ajit..?>
<script> // Javascript program to check for solutions of// diophantine equations     // Utility function to find the GCD    // of two numbers    function gcd(a, b)    {        return (a % b == 0) ?                Math.abs(b) : gcd(b,a%b);    }           // This function checks if integral    // solutions are possible    function isPossible(a,                            b, c)    {        return (c % gcd(a, b) == 0);    }    // Driver Code         // First example        let a = 3, b = 6, c = 9;        if(isPossible(a, b, c))           document.write( "Possible" + "<br/>" );        else           document.write( "Not Possible" + "<br/>" );               // Second example        a = 3; b = 6; c = 8;        if(isPossible(a, b, c))           document.write( "Possible" + "<br/>" ) ;        else           document.write( "Not Possible" + "<br/>" );               // Third example        a = 2; b = 5; c = 1;        if(isPossible(a, b, c))           document.write( "Possible" + "<br/>" );        else           document.write( "Not Possible" + "<br/>" );                       </script>
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.This article is contributed by Ashutosh Kumar. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
vt_m
jit_t
SURENDRA_GANGWAR
souravghosh0416
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
C++ Data Types
Merge two sorted arrays
Coin Change | DP-7
Sieve of Eratosthenes
Prime Numbers
Find minimum number of coins that make a given value
Minimum number of jumps to reach end