Solución de fuerza bruta:
Calcule para el GCD de cada par. Esto dará un límite superior de O ((N ^ 2) * log (x)) donde x es el valor máximo posible del elemento en la matriz.
Enfoque optimizado a través de tamiz y DP:
- ¿Cuáles son las 5 principales compañías tecnológicas actuales en Silicon Valley con las entrevistas de ingeniería más difíciles?
- Dada una matriz de n números, ¿cuál es el algoritmo para encontrar la cantidad total de subsecuencias de la matriz que están en progresión aritmética?
- ¿Crear una lista vinculada individualmente sin la prueba de head == nulo para inserción?
- ¿Cuál es la relevancia de hacer preguntas de algoritmos en una entrevista de trabajo?
- Llamaremos a un número "número agregado" si este número tiene el siguiente atributo: al igual que los números de Fibonacci 1,1,2,3,5,8,13 ... los dígitos del número pueden dividirse en varias partes, y la parte posterior es la suma de las partes anteriores.
Supongo que el tamaño del elemento máximo posible en la matriz no supera los 10 ^ 7. Precalcule un factor primo para cada número mediante el método de tamizado. Esto hará posible la factorización prima.
Código C ++: Ideone.com
Ahora use DP para calcular el número de pares no primos.
Al agregar un elemento arr [i-1] para obtener dp [i] de dp [i-1], factorizar arr [i-1] del método anterior y calcular el número de pares no primos. Para esto, necesitará un mapa que mantenga un recuento de números totales en una matriz divisible para cada primo. Ejemplo:
Supongamos que arr [i-1] = 15 y mp [3] = 9, mp [5] = 7, por lo que el número total de nuevos pares que pueden hacerse posibles sería (9 + 7) = 16. Así dp [i] = dp [i-1] +16. Reste dp [n] de nC2 para obtener el número total de pares no primos.
EDITAR: Se puede calcular fácilmente el número total de pares coprimos restando el número total de pares no primos del número total de pares.