# Find an integral solution of the non-linear equation 2X + 5Y = N

• Last Updated : 19 Mar, 2021

Given an integer N representing a non-linear equation of the form 2X + 5Y = N, the task is to find an integral pair (X, Y) that satisfies the given equation. If multiple solutions exist, then print any one of them. Otherwise, print -1.

Examples:

Input: N = 29
Output: X = 2, Y = 2
Explanation:
Since, 22 + 52 = 29
Therefore, X = 2 and Y = 2 satisfy the given equation.

Input: N = 81
Output: -1

Approach: Follow the steps below to solve the problem:

• Initialize a variable, Say xMax to store the maximum possible value of X.
• Update xMax to log2N.
• Initialize a variable, say yMax to store the maximum possible of Y.
• Update yMax to log5N
• Iterate over all possible values of X and Y and for each value of X and Y and for each pair, check if it satisfies the given equation or not. If found to be true, then print the corresponding value of X and Y.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement``// the above approach``    ` `    ` `#include ``using` `namespace` `std;`  `// Function to find the value``// of power(X, N)``long` `long` `power(``long` `long` `x,``                ``long` `long` `N)``{``    ` `    ``// Stores the value``    ``// of (X ^ N)``    ``long` `long` `res = 1;``    ` `    ` `    ``// Calculate the value of``    ``// power(x, N)``    ``while` `(N > 0) {``    ` `    ` `        ``// If N is odd``        ``if` `(N & 1) {``    ` `    ` `            ``// Update res``            ``res = (res * x) ;``        ``}``    ` `    ` `        ``// Update x``        ``x = (x * x) ;``    ` `    ` `        ``// Update N``        ``N = N >> 1;``    ``}``    ``return` `res;``}`   `// Function to find the value of``// X and Y that satisfy the condition``void` `findValX_Y(``long` `long` `N)``{``    `  `    ``// Base Case``    ``if` `(N <= 1) {``    ``cout<<-1<

## Java

 `// Java program to implement``// the above approach``import` `java.util.*;` `class` `GFG{``   ` `// Function to find the value``// of power(X, N)``static` `int` `power(``int` `x, ``int` `N)``{``    ` `    ``// Stores the value``    ``// of (X ^ N)``    ``int` `res = ``1``;``    ` `    ``// Calculate the value of``    ``// power(x, N)``    ``while` `(N > ``0``)``    ``{``        ` `        ``// If N is odd``        ``if` `((N & ``1``) != ``0``)``        ``{``            ` `            ``// Update res``            ``res = (res * x);``        ``}``        ` `        ``// Update x``        ``x = (x * x);``        ` `        ``// Update N``        ``N = N >> ``1``;``    ``}``    ``return` `res;``}` `// Function to find the value of``// X and Y that satisfy the condition``static` `void` `findValX_Y(``int` `N)``{``    ` `    ``// Base Case``    ``if` `(N <= ``1``)``    ``{``        ``System.out.println(-``1``);``        ``return``;``    ``}` `    ``// Stores maximum possible``    ``// of X.``    ``int` `xMax;``    ` `    ``// Update xMax``    ``xMax = (``int``)Math.log(N);``    ` `    ``// Stores maximum possible``    ``// of Y.``    ``int` `yMax;``    ` `    ``// Update yMax``    ``yMax = (``int``)(Math.log(N) / Math.log(``5.0``));``    ` `    ``// Iterate over all possible``    ``// values of X``    ``for``(``int` `i = ``1``; i <= xMax; i++)``    ``{``        ` `        ``// Iterate over all possible``        ``// values of Y``        ``for``(``int` `j = ``1``; j <= yMax; j++)``        ``{``            ` `            ``// Stores value of 2^i``            ``int` `a = power(``2``, i);``            ` `            ``// Stores value of 5^j``            ``int` `b = power(``5``, j);``                ` `            ``// If the pair (i, j)``            ``// satisfy the equation``            ``if` `(a + b == N)``            ``{``                ``System.out.print(i + ``" "` `+ j);``                ``return``;``            ``}``        ``}``    ``}``        ` `    ``// If no solution exists``    ``System.out.println(``"-1"``);``}``    ` `// Driver Code``public` `static` `void` `main(String args[])``{``    ``int` `N = ``129``;``    ` `    ``findValX_Y(N);``}``}` `// This code is contributed by bgangwar59`

## Python3

 `# Python3 program to implement``# the above approach``from` `math ``import` `log2``      ` `# Function to find the value``# of power(X, N)``def` `power(x, N):``    ` `    ``# Stores the value``    ``# of (X ^ N)``    ``res ``=` `1`` ` `    ``# Calculate the value of``    ``# power(x, N)``    ``while` `(N > ``0``):``        ` `        ``# If N is odd``        ``if` `(N & ``1``):``            ` `            ``# Update res``            ``res ``=` `(res ``*` `x)``            ` `        ``# Update x``        ``x ``=` `(x ``*` `x)``        ` `        ``# Update N``        ``N ``=` `N >> ``1``        ` `    ``return` `res`` ` `# Function to find the value of``# X and Y that satisfy the condition``def` `findValX_Y(N):``    ` `    ``# Base Case``    ``if` `(N <``=` `1``):``       ``print``(``-``1``)``       ``return``   ` `    ``# Stores maximum possible``    ``# of X``    ``xMax ``=` `0``    ` `    ``# Update xMax``    ``xMax ``=` `int``(log2(N))``    ` `    ``# Stores maximum possible``    ``# of Y``    ``yMax ``=` `0``    ` `    ``# Update yMax``    ``yMax ``=` `int``(log2(N) ``/` `log2(``5.0``))``    ` `    ``# Iterate over all possible``    ``# values of X``    ``for` `i ``in` `range``(``1``, xMax ``+` `1``):``        ` `        ``# Iterate over all possible``        ``# values of Y``        ``for` `j ``in` `range``(``1``, yMax ``+` `1``):``            ` `            ``# Stores value of 2^i``            ``a ``=` `power(``2``, i)``            ` `            ``# Stores value of 5^j``            ``b ``=` `power(``5``, j)``            ` `            ``# If the pair (i, j)``            ``# satisfy the equation``            ``if` `(a ``+` `b ``=``=` `N):``                ``print``(i, j)``                ``return`` ` `    ``# If no solution exists``    ``print``(``-``1``)`` ` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``N ``=` `129`` ` `    ``findValX_Y(N)` `# This code is contributed by mohit kumar 29`

## C#

 `// C# program to implement``// the above approach``using` `System;``class` `GFG{``   ` `// Function to find the``// value of power(X, N)``static` `int` `power(``int` `x,``                 ``int` `N)``{   ``  ``// Stores the value``  ``// of (X ^ N)``  ``int` `res = 1;` `  ``// Calculate the value``  ``// of power(x, N)``  ``while` `(N > 0)``  ``{        ``    ``// If N is odd``    ``if` `((N & 1) != 0)``    ``{` `      ``// Update res``      ``res = (res * x);``    ``}` `    ``// Update x``    ``x = (x * x);` `    ``// Update N``    ``N = N >> 1;``  ``}``  ``return` `res;``}` `// Function to find the``// value of X and Y that``// satisfy the condition``static` `void` `findValX_Y(``int` `N)``{    ``  ``// Base Case``  ``if` `(N <= 1)``  ``{``    ``Console.WriteLine(-1);``    ``return``;``  ``}` `  ``// Stores maximum``  ``// possible of X.``  ``int` `xMax;` `  ``// Update xMax``  ``xMax = (``int``)Math.Log(N);` `  ``// Stores maximum possible``  ``// of Y.``  ``int` `yMax;` `  ``// Update yMax``  ``yMax = (``int``)(Math.Log(N) /``               ``Math.Log(5.0));` `  ``// Iterate over all possible``  ``// values of X``  ``for``(``int` `i = 1; i <= xMax; i++)``  ``{``    ``// Iterate over all possible``    ``// values of Y``    ``for``(``int` `j = 1; j <= yMax; j++)``    ``{``      ``// Stores value of 2^i``      ``int` `a = power(2, i);` `      ``// Stores value of 5^j``      ``int` `b = power(5, j);` `      ``// If the pair (i, j)``      ``// satisfy the equation``      ``if` `(a + b == N)``      ``{``        ``Console.Write(i + ``" "` `+ j);``        ``return``;``      ``}``    ``}``  ``}` `  ``// If no solution exists``  ``Console.WriteLine(``"-1"``);``}` `// Driver Code``public` `static` `void` `Main()``{``  ``int` `N = 129;``  ``findValX_Y(N);``}``}` `// This code is contributed by surendra_gangwar`

## Javascript

 ``

Output:

`2 3`

Time Complexity: O(log2N * log5N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up