Định lý Ryley


13

S. Ryley đã chứng minh định lý sau vào năm 1825:

Mỗi số hữu tỷ có thể được biểu diễn dưới dạng tổng của ba hình khối hợp lý.

Thử thách

Cho một số số hữu tỉ tìm ba số hữu tỷ sao chorQmột,b,cQ

r=a3+b3+c3.

Chi tiết

Việc gửi của bạn sẽ có thể tính toán một giải pháp cho mọi đầu vào được cung cấp đủ thời gian và bộ nhớ, điều đó có nghĩa là việc có hai ví dụ 32 bit intđại diện cho một phân số là không đủ.

Ví dụ

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
Tôi đã có một cái gì đó tương tự như trong Japt, nhưng nó thường gặp phải lỗi "quá nhiều đệ quy". Có lẽ vì chiến lược là "lấy số ngẫu nhiên, hãy thử lại cho đến khi chúng là câu trả lời đúng".
Kamil Drakari

1
Yêu cầu hỗ trợ bignum không cần thiết loại trừ rất nhiều ngôn ngữ và / hoặc yêu cầu rất nhiều nồi hơi bị lãng phí để thực hiện chúng
Sparr

2
@Sparr Đây là một lựa chọn có chủ ý, vì đầu ra có thể khá "lớn" ngay cả đối với các đầu vào đơn giản, hoặc tùy thuộc vào phương pháp bạn sử dụng, các giá trị trung gian trong phép tính cũng có thể rất lớn. Vì vậy, làm việc với các số chính xác tùy ý là một điểm quan trọng cho thách thức này (và có lẽ khá thường xuyên trong các lý thuyết số khác cũng vậy).
flawr

1
Nó có thể được chấp nhận đầu ra [p1,p2,p3,q], được hiểu là ? (p1q)3+(p2q)3+(p3q)3
Arnauld

Cùng một tĩnh mạch tương tự, ba số hữu tỷ xuất ra có phải ở dạng đơn giản nhất không?
Quintec

Câu trả lời:


10

Pari / GP , 40 byte

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

Hãy thử trực tuyến!


Cùng một chiều dài, cùng một công thức:

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

Hãy thử trực tuyến!


Công thức này được đưa ra trong: Richmond, H. (1930). Về giải pháp Rational của x3+y3+z3= =R . Kỷ yếu của Hội toán học Edinburgh, 2 (2), 92-100.

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

Kiểm tra trực tuyến!


1
-5 byte vì bạn có thể thay đổi thứ tự của summon
Black Owl Kai

1
@BlackOwlKai Tử số của triệu hồi thứ hai là , không - 27 r 2 + 9 r - 1 . -27r3+9r-1-27r2+9r-1
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

Hãy thử trực tuyến!

Giải pháp bruteforce đơn giản. Nó kiểm tra tất cả các bộ ba số hữu tỷ của mẫu

(một1n,một2n,một3n)với -nmộtTôinn.

  • Chúng tôi luôn luôn có thể giả định rằng ba số hữu tỉ có cùng mẫu số, vì
    (một1n1,một2n2,một3n3)= =(một1n2n3n1n2n3,một2n1n3n1n2n3,một3n1n2n1n2n3).
  • -nmộtTôinn
    mộtTôin= =mộtTôiNnN
    N

"IOU" làm gì?
Solomon Ucko

@SolomonUcko Không có gì đặc biệt, nó tốt như bất kỳ danh sách nào khác có độ dài 3
Delfad0r

@ H.PWiz Tôi không thể tìm thấy bất kỳ sự đồng thuận nào về Meta về việc giả sử đầu vào đã nhập có được chấp nhận hay không, nhưng tôi vẫn tìm được cách rút ngắn mã mà không cần giả định đó. Cảm ơn!
Delfad0r

4
@ Delfad0r Có một "sự đồng thuận" rằng bạn không phải tính một lần nhập có thể, chỉ cần thiết để xây dựng loại cần thiết, nếu bạn không cần bất cứ điều gì từ việc nhập đó để xác định chức năng của mình. (Và bạn có thể giả sử rằng loại chính xác được truyền cho hàm của bạn, khi nó được gọi.)
flawr

1
Lưu một byte bằng cách sử dụng[-n,1/n-n..n]
Christian Sievers

6

Husk , 14 byte

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

Giải pháp vũ phu đơn giản. Hãy thử trực tuyến!

Giải trình

Division in Husk sử dụng số hữu tỷ theo mặc định và các sản phẩm của Cartesian hoạt động chính xác cho các danh sách vô hạn, làm cho đây là một chương trình rất đơn giản.

ḟ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

Haskell , 70 byte

Trong phần giới thiệu về Lý thuyết số (của Hardy và Wright) có một công trình thậm chí bao gồm một tham số hợp lý. Đối với mục đích chơi gôn, tôi chỉ đặt tham số này thành 1 và cố gắng giảm càng nhiều càng tốt. Điều này dẫn đến công thức

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]

Hãy thử trực tuyến!


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

Bạn có thể lưu 8 byte (hàng đầu $_=eval;) nếu bạn biết đầu vào là số nguyên; phần này là cần thiết để chương trình tìm kiếm đầu vào của biểu mẫu 308/1728. Đầu vào được đọc từ STDIN. Tôi đang sử dụng công thức được đưa ra bởi @alephalpha.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.