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 <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> |
6
Time Complexity: O(1 )
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!