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

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 = 8Output:6Explanation:6 is the largest number less than 8 which when divided by 5 leaves a remainder 1.Input:x = 4, y = 6, z = 3Output:-1Explanation: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 <bits/stdc++.h>` `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

`<script>` `// Javascript 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` `function` `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` ` ` `let val = z - x;` ` ` ` ` `// finding the possible` ` ` `// number that is divisible by y` ` ` `let div = Math.floor((z - x) / y);` ` ` ` ` `// this number is always <= x` ` ` `// as we calculated over z - x` ` ` `let ans = div * y + x;` ` ` ` ` `return` `ans;` `}` `// Driver Code` ` ` `// initialise the three integers` ` ` `let x = 1, y = 5, z = 8;` ` ` ` ` `document.write(get(x, y, z)+ ` `"\n"` `);` `</script>` |

**Output:**

6

**Time Complexity:** O(1 )

**Auxiliary Space:** O(1)