Позитивне ціле число n може бути представлено у вигляді прямокутника з цілими сторонами a , b таким, що n = a * b . Тобто площа представляє число. Загалом, a і b не є унікальними для даної n .
Як відомо, прямокутник особливо приємний для ока (чи це мозок?), Коли його сторони знаходяться в золотому співвідношенні , φ = (sqrt (5) +1) / 2 ≈ 1.6180339887 ...
Поєднуючи ці два факти, мета цього виклику полягає в тому, щоб розкласти ціле число n на добуток двох цілих чисел a , b , відношення яких максимально наближене до φ (при звичайній метриці на ℝ). Той факт, що φ ірраціональний, означає, що існує унікальна пара рішення ( a , b ).
Змагання
Враховуючи додатне ціле число n , виведіть додатні цілі числа a , b такі, що a * b = n і абсолютна різниця між a / b і φ зведена до мінімуму.
Як приклад, розглянемо n = 12. Пари ( a , b ), які задовольняють a * b = n, є: (1, 12), (2,6), (3,4), (4,3), ( 6,2), (12,1). Пара, відношення якої найближче до φ, дорівнює (4,3), що дає 4/3 = 1,333.
Правила
Функції або програми прийнятні.
Чисельник ( ) повинен з'явитися першим на виході, а знаменник ( б ) другий . Крім цього, формати введення та виведення є гнучкими, як зазвичай. Наприклад, два числа можуть бути виведені як рядки з будь-яким розумним роздільником, або як масив.
Код повинен теоретично працювати для довільно великих чисел. На практиці це може бути обмежено пам'яттю або обмеженнями типу даних.
Досить розглянути приблизну версію φ , якщо вона точна до третьої чи більшої десяткової . Тобто абсолютна різниця між справжнім φ і приблизним значенням не повинна перевищувати 0,0005. Наприклад, 1.618 прийнятно.
При використанні наближеної, раціональної версії φ є невеликий шанс, що рішення не буде унікальним. У цьому випадку ви можете вивести будь-яку пару a , b, яка відповідає критерію мінімізації.
Найкоротший код виграє.
Тестові кейси
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|
є багатообіцяючою, хоча доказ був би в порядку
a/b
. Видалення одиничного квадрата залишає невеликий прямокутник праворуч, який представляє b/a
. Таким чином, золотий прямокутник досягає різниці 1.