Eine positive ganze Zahl n kann als Rechteck mit ganzzahligen Seiten a , b dargestellt werden, so dass n = a * b ist . Das heißt, der Bereich repräsentiert die Nummer. Im Allgemeinen sind a und b für ein gegebenes n nicht eindeutig .
Bekanntlich gefällt ein Rechteck dem Auge (oder dem Gehirn?) Besonders gut, wenn sich seine Seiten im goldenen Schnitt befinden : φ = (sqrt (5) +1) / 2 ≈ 1.6180339887 ...
Kombiniert man diese beiden Tatsachen, besteht der Zweck dieser Aufgabe darin, eine ganze Zahl n in das Produkt zweier ganzer Zahlen a , b zu zerlegen , deren Verhältnis so nahe wie möglich an φ liegt (mit der üblichen Metrik für ℝ). Die Tatsache, dass φ irrational ist, impliziert, dass es ein eindeutiges Lösungspaar ( a , b ) gibt.
Die Herausforderung
Bei einer positiven ganzen Zahl n werden positive ganze Zahlen a , b ausgegeben , so dass a * b = n und die absolute Differenz zwischen a / b und φ minimiert wird.
Als Beispiel n = 12 betrachten. Die Paare ( a , b ), die a * b = n erfüllen, sind: (1, 12), (2,6), (3,4), (4,3), ( 6,2), (12,1). Das Paar, dessen Verhältnis φ am nächsten kommt, ist (4,3), was 4/3 = 1,333 ergibt.
Regeln
Funktionen oder Programme sind akzeptabel.
Der Zähler ( a ) sollte zuerst in der Ausgabe erscheinen und der Nenner ( b ) an zweiter Stelle . Ansonsten sind Ein- und Ausgabeformate wie gewohnt flexibel. Beispielsweise können die beiden Zahlen als Zeichenfolgen mit einem geeigneten Trennzeichen oder als Array ausgegeben werden.
Der Code sollte theoretisch für beliebig große Zahlen funktionieren. In der Praxis kann dies durch Speicher- oder Datentypbeschränkungen begrenzt sein.
Es ist ausreichend, eine ungefähre Version von φ zu berücksichtigen , sofern diese bis zur dritten Dezimalstelle oder besser genau ist . Das heißt, die absolute Differenz zwischen dem wahren φ und dem ungefähren Wert sollte 0,0005 nicht überschreiten. Zum Beispiel ist 1,618 akzeptabel.
Bei Verwendung einer ungefähren, rationalen Version von φ ist die Wahrscheinlichkeit gering, dass die Lösung nicht eindeutig ist. In diesem Fall können Sie jedes Paar a , b ausgeben , das das Minimierungskriterium erfüllt.
Kürzester Code gewinnt.
Testfälle
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|
ist vielversprechend, obwohl ein Beweis angebracht wäre
a/b
. Wenn Sie das Einheitsquadrat entfernen, bleibt das kleine Rechteck auf der rechten Seite, das für steht b/a
. Ein goldenes Rechteck erreicht daher eine Differenz von 1.