Schreibe Funktionen x(a)
, y(a)
und zwar z(a)
so, dass für jedes Rationale a
alle Funktionen rationale Zahlen und zurückgeben x(a)*y(a)*z(a)*(x(a) + y(a) + z(a)) == a
. Sie können eine ≥ 0 annehmen.
Sie müssen in Ihrem Programm keine rationalen Typen oder Operationen verwenden, solange Ihr Programm mathematisch korrekt ist. Wenn Sie in Ihrer Antwort beispielsweise eine Quadratwurzel verwenden, müssen Sie zeigen, dass das Argument immer ein Quadrat einer rationalen Zahl ist.
Sie können stattdessen drei benannte Funktionen x, y, z oder drei Programme schreiben, wenn Funktionen für Ihre Sprache umständlich oder nicht vorhanden sind. Alternativ können Sie auch ein einzelnes Programm / eine einzelne Funktion schreiben, die drei Zahlen x, y, z zurückgibt. Wenn Sie es vorziehen, können Sie die rationalen Zahlen als Paar von Zähler / Nenner eingeben / ausgeben. Ihre Punktzahl ist die Gesamtgröße der drei Funktionen oder drei Programme in Bytes. Kleinste Punktzahl gewinnt.
Brute Forcing ist nicht erlaubt. Für jedes a = p / q mit p, q ≤ 1000 sollte Ihr Programm in weniger als 10 Sekunden ausgeführt werden.
Ein Beispiel (dies bedeutet nicht, dass Ihre Zerlegung diese Zahlen ergeben muss):
x = 9408/43615
y = 12675/37576
z = 1342/390
x*y*z*(x+y+z) = 1
a
?Antworten:
CJam (59 Bytes)
Dies ist ein anonymer Block (eine Funktion), der eine Ganzzahl oder ein Doppel auf dem Stapel annimmt und ein Array mit drei Doppelwerten erzeugt. Es hat intern zwei Fälle, um alle nicht negativen Eingaben zu behandeln, da es bei nur einem Fall entweder auf
0.25
oder abbrechen würde4
. Es bricht immer noch für Eingaben-12
und-1.3333333333333333
, aber die Spezifikation erlaubt, dass ...Die Online-Demo führt es aus und addiert dann die Werte, druckt alle vier aus und multipliziert sie, um zu zeigen, dass es den ursprünglichen Wert erhält (Modulo-Rundungsfehler).
Mathematischer Hintergrund
Elkies gibt vier Familien von Lösungssätzen an. Euler's:
One related to Euler's:
A simpler one:
And one related to that one:
Observe that every family has at least two denominators of the formps4−qa for positive p and q : since all the terms involved are rational, that means that there's some positive a for which we get division by zero. Therefore we must use at least two sets of solutions which have their singularities at different values of a . Intuitively it's going to be golfiest to choose two sets from the same family. I've chosen the simplest family (the third one) with parameters s=1 and s=2 .
quelle
Axiom, 191 bytes
It is the traslation of the formula Peter Taylor report in this page with some code would make the denominators not be 0. one test
quelle