Phân rã hợp lý a = xyz (x + y + z)


21

Viết các hàm x(a), y(a)z(a)như vậy đối với bất kỳ số hữu tỷ nào, a tất cả các hàm đều trả về số hữu tỷx(a)*y(a)*z(a)*(x(a) + y(a) + z(a)) == a. Bạn có thể giả sử 0.

Bạn không cần phải sử dụng các loại hoặc thao tác hợp lý trong chương trình của mình, miễn là chương trình của bạn có âm thanh toán học. Ví dụ: nếu bạn sử dụng một căn bậc hai trong câu trả lời của mình, bạn phải chỉ ra rằng đối số của nó luôn là một bình phương của một số hữu tỷ.

Bạn có thể viết ba hàm có tên x, y, z hoặc viết ba chương trình thay vào đó nếu các hàm cồng kềnh hoặc không tồn tại cho ngôn ngữ của bạn. Ngoài ra, bạn cũng có thể viết một chương trình / hàm duy nhất trả về ba số x, y, z. Cuối cùng, nếu bạn thích, bạn có thể nhập / xuất các số hữu tỷ dưới dạng một cặp tử số / mẫu số. Điểm của bạn là tổng kích thước của ba hàm hoặc ba chương trình tính bằng byte. Điểm số nhỏ nhất chiến thắng.

Buộc vũ phu không được phép. Với mọi a = p / q trong đó p, q ≤ 1000 chương trình của bạn sẽ chạy trong vòng dưới 10 giây.


Một ví dụ (điều này không có nghĩa là sự phân tách của bạn phải đưa ra những con số này):

x = 9408/43615
y = 12675/37576
z = 1342/390
x*y*z*(x+y+z) = 1

Chúng ta có thể viết một hàm kết xuất tất cả chúng lại với nhau không (giả sử trong một mảng)?
Leaky Nun

Chúng ta có thể nhập tử số và mẫu số là hai số không?
Leaky Nun

@LeakyNun Có và có.
orlp

1
Là nó có thể làm được cho bất kỳ a?
Gây tử vong

2
Tôi cho rằng bạn không muốn đưa ra một bằng chứng vì nó sẽ đưa ra một giải pháp, nhưng lời nói của bạn không thực sự là một bằng chứng.
Gây tử vong

Câu trả lời:


10

CJam (59 byte)

{[WZ~C24X8TT]f*[4XGYC6 4Y].+_0=!>2%Z65135Zb+:(3/.f#:.*)W*+}

Đây là một khối ẩn danh (hàm) lấy một số nguyên hoặc gấp đôi trên ngăn xếp và tạo ra một mảng có ba nhân đôi. Nó có hai trường hợp bên trong để xử lý tất cả các đầu vào không âm, vì chỉ với một trường hợp, nó sẽ phá vỡ một trong hai 0.25hoặc 4. Nó vẫn bị hỏng cho đầu vào -12-1.3333333333333333, nhưng thông số kỹ thuật cho phép ...

Bản demo trực tuyến thực thi nó và sau đó cộng các giá trị, in cả bốn và nhân chúng để cho thấy rằng nó nhận được giá trị ban đầu (lỗi làm tròn modulo).

Nền toán học

Theo Noam Elkies, chúng tôi xác định phụ trợ . Khi đó x + y + z + w = 0- x y z w = a hoặc x y z w + a = 0w=xyzx+y+z+w=0xyzw=axyzw+a=0 . Điều này có rất nhiều đối xứng; bất kỳ giải pháp nào cũng sẽ có bốn công thức và chúng ta có thể chọn ba công thức tốt nhất.

Elkies cung cấp cho bốn gia đình của các bộ giải pháp. Euber:

x=6ast3(at42s4)2(4at4+s4)(2a2t8+10as4t4s8)y=3s5(4at4+s4)22t(at42s4)(2a2t8+10as4t4s8)z=2(2a2t8+10as4t4s8)3s3t(4at4+s4)w=(2a2t8+10as4t4s8)6s3t(at42s4)

One related to Euler's:

x=(8s8+a2)(8s888as4a2)12s3(s4a)(8s8+20as4a2)y=(8s8+a2)(8s888as4a2)12s3(8s4+a)(8s8+20as4a2)z=192as5(s4a)2(8s4+a)2(8s8+a2)(8s888as4a2)(8s8+20as4a2)w=3s(8s8+20as4a2)34(s4a)(8s4+a)(8s8+a2)(8s888as4a2)

A simpler one:

x=(s44a)22s3(s4+12a)y=2a(3s4+4a)2s3(s44a)(s4+12a)z=s5+12as2(3s4+4a)w=2s5(s4+12a)(s44a)(3s4+4a)

And one related to that one:

x=s5(s43a)32(s4+a)(s12+12as83a2s4+2a3)y=s12+12as83a2s4+2a32s3(s43a)(3s4a)z=2a(s4+a)2(3s4a)2s3(s43a)(s12+12as83a2s4+2a3)w=2s(s12+12as83a2s4+2a3)(s43a)(s4+a)(3s4a)

Observe that every family has at least two denominators of the form ps4qa 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.


1

Axiom, 191 bytes

f(s,a)==(b:=s^4-4*a;c:=s^4+12*a;x:=3*s^4+4*a;[b^2/(2*c*s^3),2*a*x^2/(b*c*s^3),s*c/(2*x)])
g(a:FRAC INT):List FRAC INT==(s:=1;repeat(s^4=4*a or s^4=-12*a or 3*s^4=4*a=>(s:=s+1);break);f(s,a))

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

(7) -> y:=g(1)
          9   98 13
   (7)  [--,- --,--]
         26   39 14
                                              Type: List Fraction Integer
(8) -> y.1*y.2*y.3*(y.1+y.2+y.3)
   (8)  1
                                              Type: Fraction Integer
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.