Um número inteiro positivo n pode ser representado como um retângulo com lados inteiros a , b , de modo que n = a * b . Ou seja, a área representa o número. Em geral, um e b não são únicos para um dado n .
Como é sabido, um retângulo é especialmente agradável aos olhos (ou é o cérebro?) Quando seus lados estão na proporção áurea , φ = (sqrt (5) +1) / 2 ≈ 1,6180339887 ...
Combinando esses dois fatos, o objetivo desse desafio é decompor um número inteiro n no produto de dois números inteiros a , b cuja razão seja o mais próximo possível de φ (com a métrica usual em ℝ). O fato de φ ser irracional implica que existe um par de soluções exclusivo ( a , b ).
O desafio
Dado um número inteiro positivo n , números inteiros positivos de saída a , b de tal forma que um * b = n e a diferença absoluta entre a / b e φ é minimizado.
Como exemplo, considere n = 12. Os pares ( a , b ) que satisfazem a * b = n são: (1, 12), (2,6), (3,4), (4,3), ( 6,2), (12,1). O par cuja razão está mais próxima de φ é (4,3), o que dá 4/3 = 1,333.
Regras
Funções ou programas são aceitáveis.
O numerador ( a ) deve aparecer primeiro na saída e o denominador ( b ) em segundo . Fora isso, os formatos de entrada e saída são flexíveis, como de costume. Por exemplo, os dois números podem ser impressos como cadeias de caracteres com qualquer separador razoável ou como uma matriz.
O código deve funcionar em teoria para números arbitrariamente grandes. Na prática, pode ser limitado por restrições de memória ou tipo de dados.
É suficiente considerar uma versão aproximada de φ , desde que seja precisa até a terceira casa decimal ou melhor. Ou seja, a diferença absoluta entre o valor verdadeiro φ e o valor aproximado não deve exceder 0,0005. Por exemplo, 1.618 é aceitável.
Ao usar uma versão aproximada e racional de φ, há uma pequena chance de que a solução não seja única. Nesse caso, você pode emitir qualquer par a , b que satisfaça o critério de minimização.
O menor código vence.
Casos de teste
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|
é promissor, embora uma prova estaria em ordem