Dada una array arr[] que consiste en N enteros positivos, la tarea es contar el número de subarreglos que consisten solo en números pronicos .
Ejemplos:
Entrada: arr[] = {5, 6, 12, 3, 4}
Salida: 3
Explicación: El subarreglo que consta solo de números pronicos es:
- {6}
- {12}
- {6, 12}
Por lo tanto, el recuento total de dichos subarreglos es 3.
Entrada: arr[] = {0, 4, 20, 30, 5}
Salida: 4
Enfoque ingenuo: el enfoque más simple para resolver el problema es generar todos los subarreglos posibles del arreglo dado y contar esos subarreglos formados solo por números pronicos . Después de verificar todos los subarreglos, imprima el conteo obtenido.
Complejidad Temporal: O(√M * N 3 ), donde M es el máximo elemento presente en el arreglo
Espacio Auxiliar: O(N)
Enfoque eficiente: el enfoque anterior se puede optimizar manteniendo el seguimiento de secuencias continuas de números pronicos y luego, contando el número de subarreglos formados.
Siga los pasos a continuación para resolver el problema:
- Inicialice una variable, digamos count , para almacenar el recuento total de subarreglos , y una variable C , para almacenar el recuento de elementos de array continua que son números pronicos .
- Recorra la array dada arr[] y realice los siguientes pasos:
- Si el elemento actual arr[i] es un número pronico , entonces incremente C en 1 .
- De lo contrario, incremente el conteo en C * (C – 1)/2 para contar el número de subarreglos con elementos C que tienen números pronicos y actualice C a 0 .
- Incremente el valor de cuenta como C*(C – 1)/2 .
- Después de completar los pasos anteriores, imprima el valor de conteo como resultado.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the approach #include <iostream> #include <cmath> using namespace std; // Function to check if a number // is pronic number or not bool isPronic(int n) { // Iterate over the range [1, sqrt(N)] int range = sqrt(n); for(int i = 0; i < range + 1; i++) { // Return true if N is pronic if (i * (i + 1) == n) return true; } // Otherwise, return false return false; } // Function to count the number of // subarrays consisting of pronic numbers int countSub(int *arr, int n) { // Stores the count of subarrays int ans = 0; // Stores the number of consecutive // array elements which are pronic int ispro = 0; // Traverse the array for(int i = 0; i < n; i++) { // If i is pronic if (isPronic(arr[i])) ispro += 1; else ispro = 0; ans += ispro; } // Return the total count return ans; } // Driver code int main() { int arr[5] = {5, 6, 12, 3, 4}; int n = sizeof(arr) / sizeof(arr[0]); cout << countSub(arr, n); return 0; } // This code is contributed by rohitsingh07052
Java
// Java program for the approach import java.lang.*; class GFG { // Function to check if a number // is pronic number or not static boolean isPronic(int n) { // Iterate over the range [1, sqrt(N)] int range = (int)Math.sqrt(n); for(int i = 0; i < range + 1; i++) { // Return true if N is pronic if (i * (i + 1) == n) return true; } // Otherwise, return false return false; } // Function to count the number of // subarrays consisting of pronic numbers static int countSub(int[] arr, int n) { // Stores the count of subarrays int ans = 0; // Stores the number of consecutive // array elements which are pronic int ispro = 0; // Traverse the array for(int i = 0; i < n; i++) { // If i is pronic if (isPronic(arr[i])) ispro += 1; else ispro = 0; ans += ispro; } // Return the total count return ans; } // Driver code public static void main(String[] args) { int[] arr = {5, 6, 12, 3, 4}; int n = arr.length; System.out.print(countSub(arr, n)); } } // This code is contributed by shivani
Python3
# Python3 program for the approach # Function to check if a number # is pronic number or not def isPronic(n): # Iterate over the range [1, sqrt(N)] for i in range(int(n ** (1 / 2)) + 1): # Return true if N is pronic if i * (i + 1) == n: return True # Otherwise, return false return False # Function to count the number of # subarrays consisting of pronic numbers def countSub(arr): # Stores the count of subarrays ans = 0 # Stores the number of consecutive # array elements which are pronic ispro = 0 # Traverse the array for i in arr: # If i is pronic if isPronic(i): ispro += 1 else: ispro = 0 ans += ispro # Return the total count return ans # Driver Code arr = [5, 6, 12, 3, 4] print(countSub(arr))
C#
// C# program for the approach using System; class GFG { // Function to check if a number // is pronic number or not static bool isPronic(int n) { // Iterate over the range [1, sqrt(N)] int range = (int)Math.Sqrt(n); for(int i = 0; i < range + 1; i++) { // Return true if N is pronic if (i * (i + 1) == n) return true; } // Otherwise, return false return false; } // Function to count the number of // subarrays consisting of pronic numbers static int countSub(int[] arr, int n) { // Stores the count of subarrays int ans = 0; // Stores the number of consecutive // array elements which are pronic int ispro = 0; // Traverse the array for(int i = 0; i < n; i++) { // If i is pronic if (isPronic(arr[i])) ispro += 1; else ispro = 0; ans += ispro; } // Return the total count return ans; } // Driver code static void Main() { int[] arr = {5, 6, 12, 3, 4}; int n = arr.Length; Console.WriteLine(countSub(arr, n)); } } // This code is contributed by divyesh072019.
Javascript
<script> // Javascript program for the approach // Function to check if a number // is pronic number or not function isPronic(n) { // Iterate over the range [1, sqrt(N)] let range = Math.sqrt(n); for(let i = 0; i < range + 1; i++) { // Return true if N is pronic if (i * (i + 1) == n) return true; } // Otherwise, return false return false; } // Function to count the number of // subarrays consisting of pronic numbers function countSub(arr, n) { // Stores the count of subarrays let ans = 0; // Stores the number of consecutive // array elements which are pronic let ispro = 0; // Traverse the array for(let i = 0; i < n; i++) { // If i is pronic if (isPronic(arr[i])) ispro += 1; else ispro = 0; ans += ispro; } // Return the total count return ans; } // Driver code let arr = [5, 6, 12, 3, 4]; let n = arr.length; document.write(countSub(arr, n)); // This code is contributed by souravmahato348. </script>
3
Complejidad de tiempo: O(N*sqrt(M)), donde M es el elemento máximo presente en la array .
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por rohitsingh07052 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA