Положительное целое число 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.