正整数n可以表示为具有整数边 a,b的矩形,这样n = a * b。即,区域代表数字。通常,对于给定的n,a和b不是唯一的。
众所周知,当矩形的边成黄金比例时,φ((sqrt(5)+1)/ 2≈1.6180339887 ...
结合这两个事实,此挑战的目的是将整数n分解为两个整数a,b的乘积,两个整数的比率尽可能接近φ(通常的度量标准为ℝ)。φ不合理这一事实意味着存在唯一的解对(a,b)。
挑战
给定正整数n,输出正整数a,b,使 a * b = n且a / b与φ之间的绝对差最小。
例如,考虑n =12。满足a * b = n的对(a,b)为:(1,12),(2,6),(3,4),(4,3),( 6,2),(12,1)。比率最接近φ的那对是(4,3),得出4/3 = 1.333。
规则
可以接受功能或程序。
的分子(一)应出现第一输出,和分母(b)第二。除此之外,输入和输出格式像往常一样灵活。例如,两个数字可以作为带有任何合理分隔符的字符串或数组输出。
该代码在理论上应适用于任意大数。实际上,它可能受到内存或数据类型限制的限制。
只要考虑到φ的近似版本就足够了,只要它精确到第三个小数或更小。即,真实φ与近似值之间的绝对差不应超过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|
很有希望,尽管有一个适当的证明