Dado un número N. La tarea es agrupar todos los números del 1 al N tal que el MCD de todos los números en cada grupo sea 1 ya que el número de grupos debe minimizarse.
Ejemplo:
Entrada: N = 3
Salida:
1 2 3
Explicación:
mcd(1, 2, 3) = 1Entrada: N = 6
Salida:
1 2
3 4
5 6
Explicación:
mcd(1, 2) = 1
mcd(3, 4) = 1
mcd(5, 6) = 1
Enfoque: Como sabemos, el hecho de que el MCD de cada número consecutivo es 1. Así que usaremos este hecho para resolver este problema. A continuación se muestran los pasos:
- Si el número es 3, entonces solo es posible un grupo {1, 2, 3} cuyo MCD(1, 2, 3) es 1.
- De lo contrario, iterar (diga i ) sobre [1, N/2] y forme grupos usando (2*i – 1, 2*i) y guárdelos en una array de vectores (diga arr[][] ).
- Los grupos almacenados en arr[][] son los grupos deseados.
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 groups void printGroups(vector<int> A[], int N) { // Iterate over [1, N/2]; for (int i = 1; i <= N / 2 + 1; i++) { // Print all pairs for (int j = 0; j < A[i].size(); j++) { cout << A[i][j] << ' '; } cout << endl; } } // Function to form a groups with GCD 1 void formGroups(int N) { int i; // Corner case if (N == 3) { cout << "1 2 3"; return; } // Array of vectors to store the // possible pairs vector<int> arr[N / 2 + 2]; for (i = 1; i <= N / 2; i++) { // Push the pair (2*i - 1, 2*i) arr[i].push_back(2 * i - 1); arr[i].push_back(2 * i); } // If N is odd then push the // last element N if (N & 1) { arr[i].push_back(N); } // Function Call printGroups(arr, N); return; } // Driver Code int main() { int N = 10; // Function Call formGroups(N); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG{ // Function to print the groups static void printGroups(Vector<Integer> A[], int N) { // Iterate over [1, N/2]; for(int i = 1; i <= N / 2 + 1; i++) { // Print all pairs for(int j = 0; j < A[i].size(); j++) { System.out.print(A[i].get(j) + " "); } System.out.println(); } } // Function to form a groups with GCD 1 static void formGroups(int N) { int i; // Corner case if (N == 3) { System.out.print("1 2 3"); return; } // Array of vectors to store the // possible pairs @SuppressWarnings("unchecked") Vector<Integer> []arr = new Vector[N / 2 + 2]; for(int k = 0; k < arr.length; k++) arr[k] = new Vector<Integer>(); for(i = 1; i <= N / 2; i++) { // Push the pair (2*i - 1, 2*i) arr[i].add(2 * i - 1); arr[i].add(2 * i); } // If N is odd then push the // last element N if ((N & 1) != 0) { arr[i].add(N); } // Function call printGroups(arr, N); return; } // Driver Code public static void main(String[] args) { int N = 10; // Function call formGroups(N); } } // This code is contributed by Rohit_ranjan
Python3
# Python3 program for # the above approach # Function to print the groups def printGroups(A, N): # Iterate over [1, N / 2]; for i in range (0, N // 2 ): # Print all pairs for j in range (len(A[i])): print (A[i][j], end = ' ') print () # Function to form a # groups with GCD 1 def formGroups(N): # Corner case if (N == 3): print ("1 2 3") return # Array of vectors # to store the # possible pairs arr = [] for i in range (1, N // 2 + 1): P = [] # Push the pair # (2 * i - 1, 2 * i) P.append(2 * i - 1) P.append(2 * i) arr.append(P) # If N is odd then push the # last element N if (N & 1): arr.append(N) # Function Call printGroups(arr, N) return # Driver Code if __name__ == "__main__": N = 10 # Function Call formGroups(N) # This code is contributed by Chitranayal
C#
// C# program for the above approach using System; using System.Collections.Generic; class GFG{ // Function to print the groups static void printGroups(List<int> []A, int N) { // Iterate over [1, N/2]; for(int i = 1; i <= N / 2 + 1; i++) { // Print all pairs for(int j = 0; j < A[i].Count; j++) { Console.Write(A[i][j] + " "); } Console.WriteLine(); } } // Function to form a groups with GCD 1 static void formGroups(int N) { int i; // Corner case if (N == 3) { Console.Write("1 2 3"); return; } // Array of vectors to store the // possible pairs List<int> []arr = new List<int>[N / 2 + 2]; for(int k = 0; k < arr.Length; k++) arr[k] = new List<int>(); for(i = 1; i <= N / 2; i++) { // Push the pair (2*i - 1, 2*i) arr[i].Add(2 * i - 1); arr[i].Add(2 * i); } // If N is odd then push the // last element N if ((N & 1) != 0) { arr[i].Add(N); } // Function call printGroups(arr, N); return; } // Driver Code public static void Main(String[] args) { int N = 10; // Function call formGroups(N); } } // This code is contributed by amal kumar choubey
Javascript
<script> // Javascript program for the above approach // Function to print the groups function printGroups(A,N) { // Iterate over [1, N/2]; for(let i = 1; i <= N / 2 + 1; i++) { // Print all pairs for(let j = 0; j < A[i].length; j++) { document.write(A[i][j] + " "); } document.write("<br>"); } } // Function to form a groups with GCD 1 function formGroups(N) { let i; // Corner case if (N == 3) { document.write("1 2 3"); return; } // Array of vectors to store the // possible pairs let arr = new Array(Math.floor(N / 2) + 2); for(let k = 0; k < arr.length; k++) arr[k] = []; for(i = 1; i <= N / 2; i++) { // Push the pair (2*i - 1, 2*i) arr[i].push(2 * i - 1); arr[i].push(2 * i); } // If N is odd then push the // last element N if ((N & 1) != 0) { arr[i].push(N); } // Function call printGroups(arr, N); return; } // Driver Code let N = 10; // Function call formGroups(N); // This code is contributed by avanitrachhadiya2155 </script>
1 2 3 4 5 6 7 8 9 10
Complejidad temporal: O(N), donde N es el número dado.
Publicación traducida automáticamente
Artículo escrito por samrat230599 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA