Dado un número entero positivo N , la tarea es encontrar el número de tripletes (A, B, C) donde A , B , C son números enteros positivos tales que el producto de dos números sumados con el tercer número es N , es decir, A * B + C = norte .
Ejemplos:
Entrada: N = 3
Salida: 3
Explicación:
Los siguientes son los posibles tripletes que satisfacen los criterios dados:
- (1, 1, 2): El valor de 1*1 + 2 = 3.
- (1, 2, 1): El valor de 1*2 + 1 = 3.
- (2, 1, 1): El valor de 2*1 + 1 = 3.
Por lo tanto, la cuenta total de tales trillizos es 3.
Entrada: N = 5
Salida: 8
Enfoque: El problema dado se puede resolver reorganizando la ecuación A * B + C = N como A * B = N – C . Ahora, los únicos valores posibles que A y B pueden tener para satisfacer la ecuación anterior son los divisores de N – C. Por ejemplo, si el valor de N – C = 18 , con 6 divisores que son 1, 2, 3, 6, 9, 18. Entonces, los valores de A, B que satisfacen la ecuación anterior son: (1, 18), ( 2, 9), (3, 6), (6, 3), (9, 2), (18, 1) . Entonces, para el valor de N – C = 18 , los posibles valores de A , B son 6 , es decir, el número de divisores de N – C (= 18). Siga los pasos a continuación para resolver el problema dado:
- Inicialice una variable, digamos contar como 0 que almacena el recuento total de posibles tripletas.
- Itere un ciclo sobre el rango [1, N – 1] usando la variable i y para cada valor, encuentro el recuento total de divisores de (N – i) y lo agrego a la variable count .
- Después de completar los pasos anteriores, imprima el valor de count como el número resultante de tripletes.
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 find the divisors of // the number (N - i) int countDivisors(int n) { // Stores the resultant count of // divisors of (N - i) int divisors = 0; int i; // Iterate over range [1, sqrt(N)] for (i = 1; i * i < n; i++) { if (n % i == 0) { divisors++; } } if (i - (n / i) == 1) { i--; } for (; i >= 1; i--) { if (n % i == 0) { divisors++; } } // Return the total divisors return divisors; } // Function to find the number of triplets // such that A * B - C = N int possibleTriplets(int N) { int count = 0; // Loop to fix the value of C for (int i = 1; i < N; i++) { // Adding the number of // divisors in count count += countDivisors(N - i); } // Return count of triplets return count; } // Driver Code int main() { int N = 10; cout << possibleTriplets(N); return 0; }
Java
// Java program for the above approach import java.io.*; class GFG { // Function to find the divisors of // the number (N - i) static int countDivisors(int n) { // Stores the resultant count of // divisors of (N - i) int divisors = 0; int i; // Iterate over range [1, sqrt(N)] for (i = 1; i * i < n; i++) { if (n % i == 0) { divisors++; } } if (i - (n / i) == 1) { i--; } for (; i >= 1; i--) { if (n % i == 0) { divisors++; } } // Return the total divisors return divisors; } // Function to find the number of triplets // such that A * B - C = N static int possibleTriplets(int N) { int count = 0; // Loop to fix the value of C for (int i = 1; i < N; i++) { // Adding the number of // divisors in count count += countDivisors(N - i); } // Return count of triplets return count; } // Driver Code public static void main (String[] args) { int N = 10; System.out.println(possibleTriplets(N)); } } // This code is contributed by Dharanendra L V.
Python3
# Python program for the above approach import math # function to find the divisors of # the number (N - i) def countDivisors(n): # Stores the resultant count of # divisors of (N - i) divisors = 0 # Iterate over range [1, sqrt(N)] for i in range(1, math.ceil(math.sqrt(n))+1): if n % i == 0: divisors = divisors+1 if (i - (n / i) == 1): i = i-1 for i in range(math.ceil(math.sqrt(n))+1, 1, -1): if (n % i == 0): divisors = divisors+1 # Return the total divisors return divisors # def to find the number of triplets # such that A * B - C = N def possibleTriplets(N): count = 0 # Loop to fix the value of C for i in range(1, N): # Adding the number of # divisors in count count = count + countDivisors(N - i) # Return count of triplets return count # Driver Code # Driver Code if __name__ == "__main__": N = 10 print(possibleTriplets(N)) # This code is contributed by Potta Lokesh
C#
// C# program for the above approach using System; using System.Collections.Generic; class GFG{ // Function to find the divisors of // the number (N - i) static int countDivisors(int n) { // Stores the resultant count of // divisors of (N - i) int divisors = 0; int i; // Iterate over range [1, sqrt(N)] for (i = 1; i * i < n; i++) { if (n % i == 0) { divisors++; } } if (i - (n / i) == 1) { i--; } for (; i >= 1; i--) { if (n % i == 0) { divisors++; } } // Return the total divisors return divisors; } // Function to find the number of triplets // such that A * B - C = N static int possibleTriplets(int N) { int count = 0; // Loop to fix the value of C for (int i = 1; i < N; i++) { // Adding the number of // divisors in count count += countDivisors(N - i); } // Return count of triplets return count; } // Driver Code public static void Main() { int N = 10; Console.Write(possibleTriplets(N)); } } // This code is contributed by SURENDRA_GANGWAR.
Javascript
<script> // javascript program for the above approach // Function to find the divisors of // the number (N - i) function countDivisors(n) { // Stores the resultant count of // divisors of (N - i) var divisors = 0; var i; // Iterate over range [1, sqrt(N)] for (i = 1; i * i < n; i++) { if (n % i == 0) { divisors++; } } if (i - (n / i) == 1) { i--; } for (; i >= 1; i--) { if (n % i == 0) { divisors++; } } // Return the total divisors return divisors; } // Function to find the number of triplets // such that A * B - C = N function possibleTriplets(N) { var count = 0; // Loop to fix the value of C for (var i = 1; i < N; i++) { // Adding the number of // divisors in count count += countDivisors(N - i); } // Return count of triplets return count; } // Driver Code var N = 10; document.write(possibleTriplets(N)); // This code is contributed by shikhasingrajput </script>
23
Complejidad de tiempo: O(N*sqrt(N))
Espacio auxiliar: O(1)