Dados tres enteros A, B y C. Puede sumar o restar A, B o 0 cualquier número de veces para formar nuevos valores en el rango 0 < final_value ≤ C . La tarea es encontrar el recuento de valores finales tan distintos posibles.
Ejemplos :
Entrada : A = 2, B = 3, C = 10
Salida : 10
Los valores posibles son:
0 + 3 – 2 =1
0 + 2 = 2
0 + 3 = 3
2 + 2 = 4
2 + 3 = 5
3 + 3 = 6
3+2+2=7
2+2+2+2=8
2+2+2+3=9
3+3+2+2=10Entrada : A = 10, B = 2, C = 10
Salida : 5
Enfoque: La idea es usar el GCD g de A y B.
El enfoque anterior funciona porque cada valor posible distinto es xA+yB
- Si A se puede escribir como g×a, B se puede escribir como g×b
- Entonces, un valor final requerido se puede escribir como xAg+yBg = (x*g*a + y*g*b) = g*(xa+yb)
- Dado que el valor máximo posible es C, entonces C = g*(xa+yb) .
- Por lo tanto, cuenta de posibles valores de este tipo = C/g , que es la respuesta requerida.
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 int gcd(int A, int B) { if (B == 0) return A; else return gcd(B, A % B); } // Function to find number of possible final values int getDistinctValues(int A, int B, int C) { // Find the gcd of two numbers int g = gcd(A, B); // Calculate number of distinct values int num_values = C / g; // Return values return num_values; } // Driver Code int main() { int A = 2; int B = 3; int C = 10; cout << (getDistinctValues(A, B, C)); return 0; } // This code is contributed by subhammahato348
Java
// Java program for the above approach import java.util.*; class GFG { // Function to calculate gcd static int gcd(int A, int B) { if (B == 0) return A; else return gcd(B, A % B); } // Function to find number of possible final values static int getDistinctValues(int A, int B, int C) { // Find the gcd of two numbers int g = gcd(A, B); // Calculate number of distinct values int num_values = C / g; // Return values return num_values; } // Driver Code public static void main(String[] args) { int A = 2; int B = 3; int C = 10; System.out.println(getDistinctValues(A, B, C)); } }
Python3
# Python program for the above approach # Function to calculate gcd def gcd(A, B) : if (B == 0) : return A; else : return gcd(B, A % B); # Function to find number of possible final values def getDistinctValues(A, B, C) : # Find the gcd of two numbers g = gcd(A, B); # Calculate number of distinct values num_values = C / g; # Return values return int(num_values); # Driver Code A = 2; B = 3; C = 10; print(getDistinctValues(A, B, C)); # This code is contributed by target_2.
C#
// C# program for the above approach using System; class GFG { // Function to calculate gcd static int gcd(int A, int B) { if (B == 0) return A; else return gcd(B, A % B); } // Function to find number of possible final values static int getDistinctValues(int A, int B, int C) { // Find the gcd of two numbers int g = gcd(A, B); // Calculate number of distinct values int num_values = C / g; // Return values return num_values; } // Driver code static void Main() { int A = 2; int B = 3; int C = 10; Console.Write(getDistinctValues(A, B, C)); } } // This code is contributed by sanjoy_62.
Javascript
<script> // JavaScript program for the above approach // Function to calculate gcd function gcd(A, B) { if (B == 0) return A; else return gcd(B, A % B); } // Function to find number of possible final values function getDistinctValues(A, B, C) { // Find the gcd of two numbers let g = gcd(A, B); // Calculate number of distinct values let num_values = C / g; // Return values return num_values; } // Driver Code let A = 2; let B = 3; let C = 10; document.write(getDistinctValues(A, B, C)); </script>
10
Complejidad del tiempo : O(log(max(A, B))
Complejidad espacial : O(1)
Publicación traducida automáticamente
Artículo escrito por hemanthswarna1506 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA