Dado un número entero positivo N y K , la tarea es dividir N en K partes de modo que la primera parte tenga un valor X , la segunda parte sea 2X , y así sucesivamente para algún valor de X. Si tal división no es posible, imprima -1 .
Ejemplos:
Entrada: N = 10, K = 4
Salida: 1 2 3 4
Explicación:
Si tomamos 1 como primer número, el segundo número será 2, el tercer número será 3 veces el primero, que es 3, y el último número será 4 veces el tercer número, entonces el último número es 4. Podemos notar que sum=1+2+3+4=10 que es la suma requerida.Entrada N = 10, K = 3
Salida: -1
Explicación:
No es posible distribuir N en 3 partes con la restricción dada.
Enfoque: Para resolver el problema mencionado anteriormente, comprendamos su implementación matemática. Sea la división X 1 , X 2 , X 3 hasta X K donde el segundo entero es X 1 * 2, el tercero es X 1 * 3 y el K-ésimo es X 1 * K.
Sabemos que,
=>
=>
=>
=> , donde ( 1 + 2 + 3 + … + K) =
=>
Entonces, para resolver el problema, debemos seguir los pasos que se detallan a continuación:
- Calcule el valor de K * (K + 1) y divida 2 * N por K * (K + 1) para obtener el valor de X 1 .
- Si X 1 no es un número entero en el paso anterior, imprima -1 ya que tal división no es posible.
- Para obtener el valor de X 2 , multiplicaremos X 1 por 2. De manera similar, para obtener X K , multiplique X 1 con K .
- Después de encontrar todos los valores, imprímalos.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <iostream> using namespace std; typedef long long int ll; // Function to find the division void solve(int n, int k) { int x1, d; // Calculating value of x1 d = k * (k + 1); // Print -1 if division // is not possible if ((2 * n) % d != 0) { cout << "-1"; return; } x1 = 2 * n / d; // Get the first number ie x1 // then successively multiply // it by x1 k times by index number // to get the required answer for (int i = 1; i <= k; i++) { cout << x1 * i << " "; } cout << endl; } // Driver Code int main() { // Given N and K int n = 10, k = 4; // Function Call solve(n, k); }
Java
// Java program for the above approach import java.util.*; class GFG{ // Function to find the division static void solve(int n, int k) { int x1, d; // Calculating value of x1 d = k * (k + 1); // Print -1 if division // is not possible if ((2 * n) % d != 0) { System.out.print("-1"); return; } x1 = 2 * n / d; // Get the first number ie x1 // then successively multiply // it by x1 k times by index number // to get the required answer for (int i = 1; i <= k; i++) { System.out.print(x1 * i+ " "); } System.out.println(); } // Driver Code public static void main(String[] args) { // Given N and K int n = 10, k = 4; // Function Call solve(n, k); } } // This code is contributed by 29AjayKumar
Python3
# Python3 program for the above approach # Function to find the division def solve(n, k): # Calculating value of x1 d = k * (k + 1); # Print -1 if division # is not possible if ((2 * n) % d != 0): print("-1"); return; x1 = 2 * n // d; # Get the first number ie x1 # then successively multiply # it by x1 k times by index number # to get the required answer for i in range(1, k + 1): print(x1 * i, end = " "); # Driver Code # Given N and K n = 10; k = 4; # Function Call solve(n, k); # This code is contributed by Code_Mech
C#
// Java program for the above approach import java.util.*; class GFG{ // Function to find the division static void solve(int n, int k) { int x1, d; // Calculating value of x1 d = k * (k + 1); // Print -1 if division // is not possible if ((2 * n) % d != 0) { System.out.print("-1"); return; } x1 = 2 * n / d; // Get the first number ie x1 // then successively multiply // it by x1 k times by index number // to get the required answer for (int i = 1; i <= k; i++) { System.out.print(x1 * i+ " "); } System.out.println(); } // Driver Code public static void main(String[] args) { // Given N and K int n = 10, k = 4; // Function Call solve(n, k); } } // This code is contributed by 29AjayKumar
1 2 3 4
Complejidad temporal: O(K)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por codebuddy_1903 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA