Dados tres enteros positivos X , Y y N , tales que Y < X , la tarea es encontrar el mayor número del rango [0, N] cuyo módulo con X es igual a Y módulo X .
Ejemplos:
Entrada: X = 10, Y = 5, N = 15
Salida: 15
Explicación:
El valor de 15 % 10 (= 5) y 5 % 10 (= 5) son iguales.
Por lo tanto, la salida requerida es 15.Entrada: X = 5, Y = 0, N = 4
Salida: 0
Enfoque: El problema dado se puede resolver con base en las siguientes observaciones:
- Dado que Y es menor que X , entonces Y % X debe ser Y . Por lo tanto, la idea de encontrar el valor máximo del rango [0, N] cuyo módulo con X es Y.
- Asuma el número máximo, digamos num = N , para obtener el módulo restante con X como Y.
- Resta N con el resto de N % X para obtener el resto como 0 y luego súmale Y. Entonces, el resto de ese número con X será Y.
- Compruebe si el número es menor que N . Si se determina que es cierto, establezca num = (N – N % X + Y) .
- De lo contrario, vuelva a restar el número con el valor de X , es decir, num = (N – N % X – (X – Y)) , para obtener el valor máximo del intervalo [0, N] .
- Matemáticamente:
- Si (N – N % X + Y) ≤ N , establezca num = (N – N % X + Y) .
- De lo contrario, actualice num = (N – N % X – (X – Y)) .
Siga los pasos a continuación para resolver el problema:
- Inicialice una variable, digamos num , para almacenar el número máximo que tiene el resto Y % X del rango [0, N] .
- Si (N – N % X + Y) ≤ N , entonces actualice num = (N – N % X + Y) .
- De lo contrario, actualice num = (N – N % X – (X – Y)) .
- Después de completar los pasos anteriores, imprima el valor de num como resultado.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to print the largest // number upto N whose modulus // with X is same as Y % X long long maximumNum(long long X, long long Y, long long N) { // Stores the required number long long num = 0; // Update num as the result if (N - N % X + Y <= N) { num = N - N % X + Y; } else { num = N - N % X - (X - Y); } // Return the resultant number return num; } // Driver Code int main() { long long X = 10; long long Y = 5; long long N = 15; cout << maximumNum(X, Y, N); return 0; }
Java
// Java program for the above approach import java.io.*; import java.lang.*; import java.util.*; class GFG { // Function to print the largest // number upto N whose modulus // with X is same as Y % X static long maximumNum(long X, long Y, long N) { // Stores the required number long num = 0; // Update num as the result if (N - N % X + Y <= N) { num = N - N % X + Y; } else { num = N - N % X - (X - Y); } // Return the resultant number return num; } // Driver Code public static void main(String[] args) { long X = 10; long Y = 5; long N = 15; System.out.println(maximumNum(X, Y, N)); } } // This code is contributed by Kingash.
Python3
# Python3 program for the above approach # Function to print the largest # number upto N whose modulus # with X is same as Y % X def maximumNum(X, Y, N): # Stores the required number num = 0 # Update num as the result if (N - N % X + Y <= N): num = N - N % X + Y else: num = N - N % X - (X - Y) # Return the resultant number return num # Driver Code if __name__ == '__main__': X = 10 Y = 5 N = 15 print (maximumNum(X, Y, N)) # This code is contributed by mohit kumar 29.
C#
// C# program for the above approach using System; class GFG { // Function to print the largest // number upto N whose modulus // with X is same as Y % X static long maximumNum(long X, long Y, long N) { // Stores the required number long num = 0; // Update num as the result if (N - N % X + Y <= N) { num = N - N % X + Y; } else { num = N - N % X - (X - Y); } // Return the resultant number return num; } // Driver Code public static void Main(string[] args) { long X = 10; long Y = 5; long N = 15; Console.WriteLine(maximumNum(X, Y, N)); } } // This code is contributed by ukasp.
Javascript
<script> // Javascript program for the above approach // Function to print the largest // number upto N whose modulus // with X is same as Y % X function maximumNum(X, Y, N) { // Stores the required number let num = 0; // Update num as the result if (N - N % X + Y <= N) { num = N - N % X + Y; } else { num = N - N % X - (X - Y); } // Return the resultant number return num; } // Driver code let X = 10; let Y = 5; let N = 15; document.write(maximumNum(X, Y, N)); // This code is contributed by target_2 </script>
15
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por dharanendralv23 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA