Der Satz von Ryley

13

S. Ryley bewies 1825 folgendes Theorem:

Jede rationale Zahl kann als Summe von drei rationalen Würfeln ausgedrückt werden.

Herausforderung

Gegeben einige rationale Zahl rQ drei rationalen Zahlen finden a,b,cQ , so dass

r=a3+b3+c3.

Einzelheiten

Ihr Beitrag sollte in der Lage sein, für jede Eingabe eine Lösung zu berechnen, wenn genügend Zeit und Speicher vorhanden sind. Das bedeutet, dass beispielsweise zwei 32-Bit-Zeichen, intdie einen Bruch darstellen, nicht ausreichen.

Beispiele

30=3982933876681363660054951533977505554546352=607029013173+2396129245436192271286533071728=(12)3+(13)3+(14)30=03+03+031=(12)3+(23)3+(56)342=(1810423509232)3+(1495210609)3+(25454944)3

fehlerhaft
quelle
1
Ich hatte etwas, das in Japt irgendwie funktionierte, aber es kam oft zu einem "zu großen Rekursionsfehler". Wahrscheinlich, weil die Strategie lautete "Zufallszahlen abrufen, versuchen Sie es erneut, bis eine korrekte Antwort vorliegt".
Kamil Drakari
1
Das Erfordernis der Bignum-Unterstützung schließt unnötigerweise viele Sprachen aus und / oder erfordert viel verschwendetes Boilerplate, um sie zu implementieren
Sparr,
2
@Sparr Dies war eine bewusste Wahl, da die Ausgabe selbst für einfache Eingaben ziemlich "groß" sein kann oder die Zwischenwerte in der Berechnung je nach verwendeter Methode auch sehr groß sein können. Die Arbeit mit willkürlichen Präzisionszahlen war daher ein wichtiger Punkt für diese Herausforderung (und wahrscheinlich auch in anderen Herausforderungen der Zahlentheorie ).
Fehler
1
Wäre es akzeptabel auszugeben [p1,p2,p3,q], interpretiert als & le ; (p1q)3+(p2q)3+(p3q)3
Arnauld
Müssen die drei ausgegebenen rationalen Zahlen in ähnlicher Weise in einfachster Form vorliegen?
Quintec

Antworten:

10

Pari / GP , 40 Bytes

r->[x=27*r^3+1,9*r-x,z=9*r-27*r^2]/(3-z)

Probieren Sie es online!


Gleiche Länge, gleiche Formel:

r->d=9*r^2-3*r+1;[x=r+1/3,3*r/d-x,1/d-1]

Probieren Sie es online!


x3+y3+z3=R. Proceedings of the Edinburgh Mathematical Society, 2(2), 92-100.

r=(27r3+127r29r+3)3+(27r3+9r127r29r+3)3+(27r2+9r27r29r+3)3

Check it online!

alephalpha
quelle
1
-5 bytes because you can change the order of the summands
Black Owl Kai
1
@BlackOwlKai The numerator of the second summand is 27r3+9r1, not 27r2+9r1.
alephalpha
8

Haskell, 95 89 76 69 68 bytes

f x=[w|n<-[1..],w<-mapM(\_->[-n,1/n-n..n])"IOU",x==sum((^3)<$>w)]!!0

Try it online!

Simple bruteforce solution. It tests all triples of rational numbers of the form

(a1n,a2n,a3n)with nainn.

  • We can always assume that the three rational numbers have the same denominator, since
    (a1n1,a2n2,a3n3)=(a1n2n3n1n2n3,a2n1n3n1n2n3,a3n1n2n1n2n3).
  • We can always assume that nainn, since
    ain=aiNnN
    for any arbitrarily large integer N.
Delfad0r
quelle
What does the "IOU" do?
Solomon Ucko
@SolomonUcko Nothing special, it's as good as any other list of length 3
Delfad0r
@H.PWiz I couldn't find any consensus on Meta on whether assuming typed input is accepted, but I still found a way to shorten the code without that assumption. Thanks!
Delfad0r
4
@Delfad0r There is a "consensus" that you do not have to count a possible import, that is only needed to construct the type needed, if you do not explicitly need anything from that import for defining your function. (And you can assume that the correct type is passed to your function, when it is called.)
flawr
1
Save one byte by using [-n,1/n-n..n]
Christian Sievers
6

Husk, 14 bytes

ḟo=⁰ṁ^3π3×/NİZ

Simple brute force solution. Try it online!

Explanation

Division in Husk uses rational numbers by default and Cartesian products work correctly for infinite lists, making this a very straightforward program.

ḟo=⁰ṁ^3π3×/NİZ
            İZ  Integers: [0,1,-1,2,-2,3,-3...
           N    Natural numbers: [1,2,3,4,5...
         ×/     Mix by division: [0,1,0,-1,1/2,0,2,-1/2,1/3...
                This list contains n/m for every integer n and natural m.
       π3       All triples: [[0,0,0],[0,0,1],[1,0,0]...
ḟ               Find the first one
    ṁ^3         whose sum of cubes
 o=⁰            equals the input.
Zgarb
quelle
2

JavaScript (Node.js), 73 bytes

Takes input as (p)(q), where p and q are BigInt literals.

Returns [[p1,q1],[p2,q2],[p3,q3]] such that pq=(p1q1)3+(p2q2)3+(p3q3)3.

p=>q=>[x=p*(y=p*(p*=9n*q*q)*3n/q)/q+(q*=q*q),p-x,p-=y].map(x=>[x,3n*q-p])

Try it online!

Derived from H. W. Richmond (1930), On Rational Solutions of x3 + y3 +z3 = R.

Arnauld
quelle
2

Haskell, 70 bytes

In An introduction to the Theory of Numbers (by Hardy and Wright) there is an construction that even includes a rational parameter. For golfing purposes I just set this parameter to 1, and tried reducing as much as possible. This results in the formula

r[r3648r2+77760r+37324872(r+72)2,12(r72)r(r+72)2,r2720r+518472(r+72)]

f r|t<-r/72,c<-t+1,v<-24*t/c^3,a<-(v*t-1)*c=((a+v*c+c)/2-)<$>[a,v*c,c]

Try it online!

flawr
quelle
1

perl -Mbigrat -nE, 85 bytes

$_=eval;($a,$b)=($_*9,$_**2*27);$c=$b*$_;say for map$_/($b-$a+3),$c+1,-$c+$a-1,-$b+$a

You can save 8 bytes (the leading $_=eval;) if you know the input is an integer; this part is needed to have the program grok an input of the form 308/1728. Input is read from STDIN. I'm using the formula given by @alephalpha.


quelle