Un número entero positivo n puede representarse como un rectángulo con lados enteros a , b tal que n = a * b . Es decir, el área representa el número. En general, una y b no son únicos para un determinado n .
Como es bien sabido, un rectángulo es especialmente agradable a la vista (¿o es el cerebro?) Cuando sus lados están en la proporción dorada , φ = (sqrt (5) +1) / 2 ≈ 1.6180339887 ...
Combinando estos dos hechos, el propósito de este desafío es descomponer un número entero n en el producto de dos números enteros a , b cuya relación sea lo más cercana posible a φ (con la métrica usual en ℝ). El hecho de que φ sea irracional implica que hay un par de solución único ( a , b ).
El reto
Dado un número entero positivo n , de salida enteros positivos a , b de tal manera que un * b = n y la diferencia absoluta entre un / b y φ se minimiza.
Como ejemplo, considere n = 12. Los pares ( a , b ) que satisfacen a * b = n son: (1, 12), (2,6), (3,4), (4,3), ( 6,2), (12,1). El par cuya relación es más cercana a φ es (4,3), lo que da 4/3 = 1.333.
Reglas
Las funciones o programas son aceptables.
El numerador ( a ) debe aparecer primero en la salida, y el denominador ( b ) segundo . Aparte de eso, los formatos de entrada y salida son flexibles como de costumbre. Por ejemplo, los dos números se pueden generar como cadenas con cualquier separador razonable o como una matriz.
El código debería funcionar en teoría para números arbitrariamente grandes. En la práctica, puede estar limitado por restricciones de memoria o de tipo de datos.
Es suficiente considerar una versión aproximada de φ , siempre que sea precisa hasta el tercer decimal o mejor. Es decir, la diferencia absoluta entre el verdadero φ y el valor aproximado no debe exceder 0.0005. Por ejemplo, 1.618 es aceptable.
Cuando se utiliza una versión aproximada y racional de φ, existe una pequeña posibilidad de que la solución no sea única. En ese caso, puede generar cualquier par a , b que satisfaga el criterio de minimización.
El código más corto gana.
Casos de prueba
1 -> 1 1
2 -> 2 1
4 -> 2 2
12 -> 4 3
42 -> 7 6
576 -> 32 18
1234 -> 2 617
10000 -> 125 80
199999 -> 1 199999
9699690 -> 3990 2431
|a/b-b/a-1|
es prometedora, aunque una prueba estaría en orden
a/b
. Al quitar el cuadrado de la unidad se deja el pequeño rectángulo a la derecha que representa b/a
. Por lo tanto, un rectángulo dorado logra una diferencia de 1.