GFG App
Open App
Browser
Continue

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

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