Dados tres enteros no negativos A , B y C , la tarea es contar los números en el rango [1, C] que se pueden reducir a 0 sumando o restando A o B .
Ejemplos:
Entrada: A = 2, B = 4, C = 7
Salida: 3
Explicación: Los números del rango [1, 7] que pueden reducirse a 0 mediante operaciones dadas son:
- Para el elemento 2: El número se puede modificar como 2 – 2 = 0.
- Para el elemento 4: El número se puede modificar como 4 – 2 – 2 = 0.
- Para el elemento 6: El número se puede modificar como 6 – 4 – 2 = 0.
Por lo tanto, la cuenta total es 3.
Entrada: A = 2, B = 3, C = 5
Salida: 5
Enfoque: El problema dado se puede resolver con base en las siguientes observaciones:
- Considere X e Y el número de sumas o restas de A y B que se realizan respectivamente.
- Después de aplicar las operaciones sobre cualquier número N , se convierte en Ax + By . Por lo tanto, por el Algoritmo de Euclides Extendido , se puede decir que existen coeficientes enteros x e y tales que Ax + By = GCD(A, B) .
- Por lo tanto, N debe ser un múltiplo de MCD(A, B) , digamos G . Ahora el problema se reduce a encontrar el número de múltiplos de G que están en el rango [1, C] que es piso (C/G) .
Siga los pasos a continuación para resolver el problema:
- Encuentre el MCD de A y B y guárdelo en una variable, digamos G .
- Ahora, el conteo de números sobre el rango [1, C] son los múltiplos de G que tienen valores como máximo C , que viene dado por el piso (C/G) .
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 calculate GCD of the // two numbers a and b long long gcd(long long a, long long b) { // Base Case if (b == 0) return a; // Recursively find the GCD return gcd(b, a % b); } // Function to count the numbers up // to C that can be reduced to 0 by // adding or subtracting A or B void countDistinctNumbers(long long A, long long B, long long C) { // Stores GCD of A and B long long g = gcd(A, B); // Stores the count of multiples // of g in the range (0, C] long long count = C / g; // Print the result cout << count; } // Driver Code int main() { long long A = 2, B = 3, C = 5; countDistinctNumbers(A, B, C); return 0; }
Java
// Java program for the above approach class GFG{ // Function to calculate GCD of the // two numbers a and b static long gcd(long a, long b) { // Base Case if (b == 0) return a; // Recursively find the GCD return gcd(b, a % b); } // Function to count the numbers up // to C that can be reduced to 0 by // adding or subtracting A or B static void countDistinctNumbers(long A, long B, long C) { // Stores GCD of A and B long g = gcd(A, B); // Stores the count of multiples // of g in the range (0, C] long count = C / g; // Print the result System.out.println(count); } // Driver Code public static void main(String[] args) { long A = 2, B = 3, C = 5; countDistinctNumbers(A, B, C); } } // This code is contributed by abhinavjain194
Python3
# Python3 program for the above approach # Function to calculate GCD of the # two numbers a and b def gcd(a, b): # Base Case if (b == 0): return a # Recursively find the GCD return gcd(b, a % b) # Function to count the numbers up # to C that can be reduced to 0 by # adding or subtracting A or B def countDistinctNumbers(A, B, C): # Stores GCD of A and B g = gcd(A, B) # Stores the count of multiples # of g in the range (0, C] count = C // g # Print the result print(count) # Driver code A = 2 B = 3 C = 5 countDistinctNumbers(A, B, C) # This code is contributed by abhinavjain194
C#
// C# program for the above approach using System; class GFG{ // Function to calculate GCD of the // two numbers a and b static long gcd(long a, long b) { // Base Case if (b == 0) return a; // Recursively find the GCD return gcd(b, a % b); } // Function to count the numbers up // to C that can be reduced to 0 by // adding or subtracting A or B static void countDistinctNumbers(long A, long B, long C) { // Stores GCD of A and B long g = gcd(A, B); // Stores the count of multiples // of g in the range (0, C] long count = C / g; // Print the result Console.Write(count); } // Driver Code static void Main() { long A = 2, B = 3, C = 5; countDistinctNumbers(A, B, C); } } // This code is contributed by abhinavjain194
Javascript
<script> // Javascript program for the above approach // Function to calculate GCD of the // two numbers a and b function gcd(a, b) { // Base Case if (b == 0) return a; // Recursively find the GCD return gcd(b, a % b); } // Function to count the numbers up // to C that can be reduced to 0 by // adding or subtracting A or B function countDistinctNumbers(A, B, C) { // Stores GCD of A and B var g = gcd(A, B); // Stores the count of multiples // of g in the range (0, C] var count = C / g; // Print the result document.write(count); } // Driver Code var A = 2, B = 3, C = 5; countDistinctNumbers(A, B, C); // This code is contributed by ipg2016107. </script>
Producción:
5
Complejidad de tiempo: O(log(min(A, B)))
Espacio auxiliar: O(1)