Teorema Ryley

13

S. Ryley terbukti mengikuti teorema pada tahun 1825:

Setiap bilangan rasional dapat dinyatakan sebagai jumlah dari tiga kubus rasional.

Tantangan

Diberikan bilangan rasional rQ temukan tiga bilangan rasional a,b,cQ sedemikian rupa sehingga

r=a3+b3+c3.

Detail

Kiriman Anda harus dapat menghitung solusi untuk setiap input yang diberikan cukup waktu dan memori, itu berarti memiliki misalnya dua 32-bit yang intmewakili sebagian kecil tidak cukup.

Contohnya

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

cacat
sumber
1
Saya memiliki sesuatu yang semacam itu bekerja di Japt, tetapi sering mengalami kesalahan "terlalu banyak rekursi". Mungkin karena strateginya adalah "dapatkan angka acak, coba lagi sampai mereka jawaban yang benar".
Kamil Drakari
1
Membutuhkan dukungan bignum yang tidak perlu mengecualikan banyak bahasa, dan / atau membutuhkan banyak piring kosong untuk mengimplementasikannya
Sparr
2
@Sparr Ini adalah pilihan yang disengaja, karena outputnya bisa cukup "besar" bahkan untuk input sederhana, atau tergantung pada metode apa yang Anda gunakan, nilai-nilai perantara dalam perhitungan juga bisa sangat besar. Jadi bekerja dengan angka presisi yang berubah-ubah adalah poin penting untuk tantangan ini (dan mungkin cukup sering dalam teori-nomor lain - juga tantangan).
flawr
1
Apakah bisa diterima untuk output [p1,p2,p3,q], ditafsirkan sebagai ? (p1q)3+(p2q)3+(p3q)3
Arnauld
Sepanjang nada yang sama, apakah tiga bilangan rasional yang dihasilkan harus dalam bentuk paling sederhana?
Quintec

Jawaban:

10

Pari / GP , 40 byte

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

Cobalah online!


Panjang yang sama, rumus yang sama:

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

Cobalah online!


Formula ini diberikan dalam: Richmond, H. (1930). Pada Solusi Rasional x3+y3+z3=R . Prosiding Masyarakat Matematika Edinburgh, 2(2), 92-100.

r=(27r3+127r2-9r+3)3+(-27r3+9r-127r2-9r+3)3+(-27r2+9r27r2-9r+3)3

Periksa secara online!

alephalpha
sumber
1
-5 byte karena Anda dapat mengubah urutan puncak
Black Owl Kai
1
@BlackOwlKai Pembilang dari puncak kedua adalah , bukan - 27 r 2 + 9 r - 1 . 27r3+9r127r2+9r1
alephalpha
8

Haskell , 95 89 76 69 68 byte

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

Cobalah online!

Solusi bruteforce sederhana. Ini menguji semua tiga kali lipat bilangan rasional dari bentuk

(a1n,a2n,a3n)with nainn.

  • (a1n1,a2n2,a3n3)=(a1n2n3n1n2n3,a2n1n3n1n2n3,a3n1n2n1n2n3).
  • We can always assume that nainn, since
    ain=aiNnN
    for any arbitrarily large integer N.
Delfad0r
sumber
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
sumber
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
sumber
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[r3-648r2+77760r+37324872(r+72)2,12(r-72)r(r+72)2,-r2-720r+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]

Cobalah online!

cacat
sumber
1

perl -Mbigrat -nE, 85 byte

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

Anda dapat menyimpan 8 byte (terkemuka $_=eval;) jika Anda tahu inputnya adalah integer; bagian ini diperlukan untuk mendapatkan program grok input dari formulir 308/1728. Input dibaca dari STDIN. Saya menggunakan formula yang diberikan oleh @alephalpha.


sumber