Related Articles

# Largest number less than or equal to Z that leaves a remainder X when divided by Y

• Difficulty Level : Medium
• Last Updated : 29 Apr, 2021

Given three integers x, y, z, the task is to find the largest non-negative number less than or equal to z that leaves a remainder x when divided by y (Given x < y). If no such number exists then the output will be -1.
Examples:

```Input: x = 1, y = 5, z = 8
Output: 6
Explanation:
6 is the largest number less than 8
which when divided by 5
leaves a remainder 1.

Input: x = 4, y = 6, z = 3
Output: -1
Explanation:
Since no such number exists the output is -1```

Approach: To solve the problem mentioned above the very first observation is if x > z then answer will not be possible, so output will be -1.
Let the required number be p. Following are the two equations for solving the problem:

• p * y + x = 0
• p * y <= (z – x)

In order to find the answer, we need to find the value of p. So,

`p = (z - x) / y`

After calculating p we can simply find the answer which is

`p * y + x`

Below is the implementation of the above approach:

## C++

 `// C++ implementation to Find the``// largest non-negative number that``// is less than or equal to integer Z``// and leaves a remainder X when divided by Y` `#include ``using` `namespace` `std;` `// Function to get the number``int` `get(``int` `x, ``int` `y, ``int` `z)``{` `    ``// remainder can't be larger``    ``// than the largest number,``    ``// if so then answer doesn't exist.``    ``if` `(x > z)``        ``return` `-1;` `    ``// reduce number by x``    ``int` `val = z - x;` `    ``// finding the possible``    ``// number that is divisible by y``    ``int` `div` `= (z - x) / y;` `    ``// this number is always <= x``    ``// as we calculated over z - x``    ``int` `ans = ``div` `* y + x;` `    ``return` `ans;``}` `// Driver Code``int` `main()``{``    ``// initialise the three integers``    ``int` `x = 1, y = 5, z = 8;` `    ``cout << get(x, y, z) << ``"\n"``;` `    ``return` `0;``}`

## Java

 `// Java implementation to Find the``// largest non-negative number that``// is less than or equal to integer Z``// and leaves a remainder X when divided by Y``class` `GFG{`` ` `// Function to get the number``static` `int` `get(``int` `x, ``int` `y, ``int` `z)``{`` ` `    ``// remainder can't be larger``    ``// than the largest number,``    ``// if so then answer doesn't exist.``    ``if` `(x > z)``        ``return` `-``1``;`` ` `    ``// reduce number by x``    ``int` `val = z - x;`` ` `    ``// finding the possible``    ``// number that is divisible by y``    ``int` `div = (z - x) / y;`` ` `    ``// this number is always <= x``    ``// as we calculated over z - x``    ``int` `ans = div * y + x;`` ` `    ``return` `ans;``}`` ` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``// initialise the three integers``    ``int` `x = ``1``, y = ``5``, z = ``8``;`` ` `    ``System.out.print(get(x, y, z)+ ``"\n"``);``}``}` `// This code is contributed by sapnasingh4991`

## Python3

 `# Python implementation to Find the``# largest non-negative number that``# is less than or equal to integer Z``# and leaves a remainder X when divided by Y` `# Function to get the number``def` `get(x, y, z):``    ` `    ``# remainder can't be larger``    ``# than the largest number,``    ``# if so then answer doesn't exist.``    ``if` `(x > z):``        ``return` `-``1``        ` `    ``# reduce number by x``    ``val ``=` `z ``-` `x``    ` `    ``# finding the possible``    ``# number that is divisible by y``    ``div ``=` `(z ``-` `x) ``/``/` `y``    ` `    ` `    ``# this number is always <= x``    ``# as we calculated over z - x``    ``ans ``=` `div ``*` `y ``+` `x``    ` `    ``return` `ans`  `# Driver Code``# initialise the three integers``x ``=` `1``y ``=` `5``z ``=` `8` `print``(get(x, y, z))` `# This code is contributed by shubhamsingh10`

## C#

 `// C# implementation to Find the``// largest non-negative number that``// is less than or equal to integer Z``// and leaves a remainder X when divided by Y``using` `System;` `class` `GFG{``  ` `// Function to get the number``static` `int` `get``(``int` `x, ``int` `y, ``int` `z)``{``  ` `    ``// remainder can't be larger``    ``// than the largest number,``    ``// if so then answer doesn't exist.``    ``if` `(x > z)``        ``return` `-1;``  ` `    ``// reduce number by x``    ``int` `val = z - x;``  ` `    ``// finding the possible``    ``// number that is divisible by y``    ``int` `div = (z - x) / y;``  ` `    ``// this number is always <= x``    ``// as we calculated over z - x``    ``int` `ans = div * y + x;``  ` `    ``return` `ans;``}``  ` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ``// initialise the three integers``    ``int` `x = 1, y = 5, z = 8;``  ` `    ``Console.Write(``get``(x, y, z)+ ``"\n"``);``}``}` `// This code is contributed by sapnasingh4991`

## Javascript

 ``
Output:
`6`

Time Complexity: O(1 )

Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up