양의 정수 N은 A와 표현할 수있는 정수 양쪽 직사각형 , B 되도록 N = * B . 즉, 영역은 숫자를 나타냅니다. 일반적으로 a 와 b 는 주어진 n에 대해 고유하지 않습니다 .
잘 알려진 바와 같이, 사각형이 측면이 황금비 일 때 직사각형은 눈을 즐겁게 (또는 뇌입니까?) φ = (sqrt (5) +1) / 2 ≈ 1.6180339887 ...
이 두 가지 사실 결합이 문제의 목적은 정수를 분해하는 N 개의 정수의 곱으로 , B 그 비율에 가능한 한 가깝게이다 φ (ℝ에 통상 메트릭). 사실 φ가 불합리 고유 용액 쌍 (있다는 것을 의미 , B는 ).
도전
양수 주어 N 출력 양수 , B 되도록 * B = N 사이의 차분 절대 /의 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|증거가 필요하지만 최소화에 대한 당신의 아이디어 는 유망합니다.