ทฤษฎีบทของไรลีย์


13

S. Ryley พิสูจน์ทฤษฎีบทต่อไปนี้ใน 1,825:

จำนวนตรรกยะทุกตัวสามารถแสดงเป็นผลรวมของสามลูกบาศก์เชิงเหตุผล

ท้าทาย

ได้รับบางส่วนจำนวนจริงrQหาหมายเลขสามเหตุผล, , Qเช่นว่าR = 3 + 3 + 3a,b,cQ

r=a3+b3+c3.

รายละเอียด

การส่งข้อมูลของคุณควรจะสามารถคำนวณวิธีแก้ปัญหาสำหรับอินพุตที่ให้เวลาและหน่วยความจำได้เพียงพอนั่นหมายความว่าการมีอินสแตนซ์ 32 บิตสองตัวที่intแสดงเศษส่วนไม่เพียงพอ

ตัวอย่าง

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


1
ฉันมีบางอย่างที่ทำงานแบบ Japt แต่มักจะพบข้อผิดพลาด "เรียกซ้ำมากเกินไป" อาจเป็นเพราะกลยุทธ์คือ "รับตัวเลขสุ่มลองอีกครั้งจนกว่าจะเป็นคำตอบที่ถูกต้อง"
Kamil Drakari

1
ต้องการการสนับสนุน bignum โดยไม่จำเป็นต้องแยกภาษาเป็นจำนวนมากโดยไม่จำเป็นและ / หรือต้องใช้หม้อไอน้ำจำนวนมากที่สูญเสียไปเพื่อการติดตั้ง
Sparr

2
@Sparr นี่เป็นตัวเลือกโดยเจตนาเนื่องจากเอาต์พุตอาจค่อนข้าง "ใหญ่" ถึงแม้จะเป็นอินพุตแบบง่ายหรือขึ้นอยู่กับวิธีการที่คุณใช้ค่ากลางในการคำนวณอาจมีขนาดใหญ่มาก ดังนั้นการทำงานกับตัวเลขความแม่นยำโดยพลการเป็นจุดสำคัญสำหรับความท้าทายนี้ (และอาจจะค่อนข้างบ่อยในอื่น ๆจำนวนทฤษฎี -challenges เกินไป)
ข้อบกพร่อง

1
มันจะเป็นที่ยอมรับในการส่งออก[p1,p2,p3,q]ตีความว่าเป็น? (p1q)3+(p2q)3+(p3q)3
Arnauld

ตามแนวเส้นโลหิตดำที่คล้ายกันตัวเลขสามตัวที่มีเหตุผลออกมานั้นจะต้องอยู่ในรูปแบบที่ง่ายที่สุดหรือไม่?
Quintec

คำตอบ:


10

Pari / GP 40 ไบต์

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

ลองออนไลน์!


ความยาวเท่ากันสูตรเดียวกัน:

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

ลองออนไลน์!


สูตรนี้มีให้ใน: Richmond, H. (1930) เกี่ยวกับโซลูชั่นเหตุผลของx3+y3+z3=R R กิจการของสมาคมคณิตศาสตร์แห่งเอดินเบิร์ก, 2 (2), 92-100

R=(27R3+127R2-9R+3)3+(-27R3+9R-127R2-9R+3)3+(-27R2+9R27R2-9R+3)3

ตรวจสอบออนไลน์!


1
-5 ไบต์เนื่องจากคุณสามารถเปลี่ยนลำดับการเรียก
Black Owl Kai

1
27r3+9r127r2+9r1

8

Haskell , 95 89 76 69 68 ไบต์

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

ลองออนไลน์!

วิธีการแก้ปัญหา bruteforce ง่าย มันทดสอบอเนกประสงค์ทั้งหมดของจำนวนตรรกยะของแบบฟอร์ม

(a1n,a2n,a3n)กับ -naผมnn.

  • เราสามารถสันนิษฐานได้เสมอว่าตัวเลขสามตัวนี้มีตัวส่วนเหมือนกันนับตั้งแต่
    (a1n1,a2n2,a3n3)=(a1n2n3n1n2n3,a2n1n3n1n2n3,a3n1n2n1n2n3).
  • เราสามารถสันนิษฐานได้เสมอ -naผมnn, ตั้งแต่
    aผมn=aผมยังไม่มีข้อความnยังไม่มีข้อความ
    สำหรับจำนวนเต็มขนาดใหญ่โดยพลการใด ๆ ยังไม่มีข้อความ.

"IOU" ทำอะไร
โซโลมอน 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.

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.


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!


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.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.