Dodatnia liczba całkowita n może być reprezentowana przez prostokąt z bokami liczb całkowitych a , b takimi, że n = a * b . Oznacza to, że obszar reprezentuje liczbę. Na ogół, i b nie są unikatowe dla danego n .
Jak dobrze wiadomo, prostokąt jest szczególnie przyjemny dla oka (czy jest to mózg?), Gdy jego boki są w złotym stosunku , φ = (sqrt (5) +1) / 2 ≈ 1.6180339887 ...
Łącząc te dwa fakty, celem tego wyzwania jest rozkład liczby całkowitej n na iloczyn dwóch liczb całkowitych a , b, których stosunek jest jak najbardziej zbliżony do φ (przy zwykłej metodzie na ℝ). Fakt, że φ jest irracjonalny, oznacza, że istnieje unikalna para rozwiązań ( a , b ).
Wyzwanie
Biorąc pod uwagę dodatnią liczbę całkowitą n , wyjściowe dodatnie liczby całkowite a , b są takie, że a * b = n i absolutna różnica między a / b i φ jest zminimalizowana.
Jako przykład rozważmy n = 12. Pary ( a , b ), które spełniają a * b = n, to: (1, 12), (2,6), (3,4), (4,3), ( 6,2), (12,1). Para, której stosunek jest najbliższy φ, wynosi (4,3), co daje 4/3 = 1,333.
Zasady
Funkcje lub programy są dopuszczalne.
Licznik ( ) powinien pojawić się pierwszy na wyjściu, a mianownik ( b ) drugi . Poza tym formaty wejściowe i wyjściowe są jak zwykle elastyczne. Na przykład dwie liczby mogą być wyprowadzane jako ciągi znaków z dowolnym rozsądnym separatorem lub jako tablica.
Kod powinien działać teoretycznie dla dowolnie dużych liczb. W praktyce może to być ograniczone pamięcią lub ograniczeniami typu danych.
To wystarczy, aby rozważyć przybliżoną wersję cp , tak długo, jak to jest dokładne aż do trzeciej po przecinku lub lepszej. Oznacza to, że bezwzględna różnica między prawdziwą φ a przybliżoną wartością nie powinna przekraczać 0,0005. Na przykład 1.618 jest akceptowalny.
Podczas korzystania z przybliżonej, racjonalnej wersji φ istnieje niewielkie prawdopodobieństwo, że rozwiązanie nie jest unikalne. W takim przypadku możesz wygenerować dowolną parę a , b, która spełnia kryterium minimalizacji.
Najkrótszy kod wygrywa.
Przypadki testowe
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|
jest obiecujący, chociaż dowód byłby w porządku