La idea principal es: uno de by (ab) es pequeño. Si ambos son grandes, digamos> = 50, n sería muy grande. Por lo tanto, variaríamos sobre b digamos de 1 a 50 y luego sobre algunos valores de a y veremos si nos dan la respuesta deseada de n o no.
A continuación, no queremos movernos sobre muchos valores de a. Si corrijo que b sea 2, ¿qué tan grande podría ser? Alrededor de O (sqrt n). Si b era 3, a podría estar al máximo alrededor de O (raíz de cubo n) y así sucesivamente. Entonces, para b = 2, varíe hasta sqrt (n,) para b = 3, hasta cuberoot (n) y así sucesivamente.
En la práctica, lo que haría es variar a de 1 a sqrt (2 * n), b de 1 a 10. Y también b de 11 a 50 y a de 1 a 8 raíz de N (o un número fijo suficientemente grande) ) y verifique si algún par da la respuesta correcta o no. Este es el algoritmo O (sqrt N).
De hecho, se puede hacer mucho más rápido en realidad: para b fijo, no es necesario que varíe en un rango, solo los más relevantes. por ejemplo, para b = 2, puede moverse entre sqrt (n) – 20 a sqrt (n) + 20 y así sucesivamente.
- ¿Todas las funciones generadoras de números (pseudo) aleatorios son cíclicas?
- Delta suma máxima: ¿Cómo podría ordenar 1 millón de enteros, de un conjunto de enteros positivos infinitos que tienen como máximo 8 dígitos de largo, de modo que estén (1) ordenados, y (2) la suma de todos los deltas entre números adyacentes es en el valor máximo posible y por qué?
- ¿Cuál es la diferencia entre la solución de estrategia dominante y el equilibrio de Nash?
- ¿Cómo puedo encontrar todos los casos de combinación con un número dado?
- ¿Existe un algoritmo que encuentre subgrafías de un gráfico de manera que cada nodo en una subgrafía esté conectado a al menos k otros nodos de esa subgrafía?