No sé si es el mejor método, pero es eficiente, ya que funciona en O (n * logn). Recientemente resolví una pregunta en hackerrank.com basada en la pregunta que hiciste. Entonces mi enfoque es como:
Supongamos que MAX es el límite de cualquier elemento de la matriz, es decir, ai <= MAX. Ahora un número que dice x será el MCD de cualquier par en la matriz si ambos elementos del par son múltiplos de x. Entonces, podemos tener una verificación de todas las x desde MAX hasta 1 (en orden decreciente) si hay dos múltiplos presentes en la matriz o no. El número de múltiplos de x hasta MAX estaría alrededor de MAX / x y cada múltiplo se puede verificar por su presencia en la matriz en tiempo constante (marcando la matriz de entrada por adelantado). Entonces, la primera x para la cual se encuentran dos múltiplos en la matriz sería su respuesta.
La complejidad del tiempo sería O (MAX * log (X)) aproximadamente … como MAX / 1 + MAX / 2 + …… .. MAX / MAX es aproximadamente log (MAX) (la complejidad del tiempo aún es discutible pero pasará en la mayoría de las preguntas).
¡Mejor!
- Dado un conjunto [matemática] S [/ matemática] de [matemática] 2 ^ n [/ matemática] cadenas binarias, [matemática] \ forall [/ matemática] [matemática] s_i \ en S [/ matemática] es de tamaño [matemática ] n [/ math] y asignado a [math] 0 [/ math] o [math] 1 [/ math], ¿podemos sintetizar un oráculo [math] f [/ math] que mapee las cadenas binarias, es decir, [math ] f: S \ rightarrow \ {0,1 \} [/ math]?
- ¿Cómo resolver el problema geométrico?
- ¿Existe un algoritmo que pueda determinar la cantidad total de solos de guitarra posibles?
- ¿Qué algoritmo usan las computadoras para calcular sqrt (x)?
- ¿Por qué es un número triangular la suma de los primeros n números naturales?