S. Ryley demostró el siguiente teorema en 1825:
Cada número racional se puede expresar como una suma de tres cubos racionales.
Desafío
Dado un número racional r∈Q encuentre tres números racionales a,b,c∈Q tales que r=a3+b3+c3.
Detalles
Su envío debe poder calcular una solución para cada entrada con suficiente tiempo y memoria, lo que significa que tener, por ejemplo, dos 32 bits que int
representan una fracción no es suficiente.
Ejemplos
305230717280142=39829338766813−6366005495153−39775055545463=607029013173+239612924543−619227128653=(12)3+(13)3+(14)3=03+03+03=(12)3+(23)3+(56)3=(1810423509232)3+(−1495210609)3+(−25454944)3
[p1,p2,p3,q]
, interpretada como ?Respuestas:
Pari / GP , 40 bytes
Pruébalo en línea!
La misma longitud, la misma fórmula:
Pruébalo en línea!
This formula is given in: Richmond, H. (1930). On Rational Solutions ofx3+y3+z3=R . Proceedings of the Edinburgh Mathematical Society, 2(2), 92-100.
Check it online!
fuente
Haskell,
9589766968 bytesTry it online!
Simple bruteforce solution. It tests all triples of rational numbers of the form(a1n,a2n,a3n)with −n≤ain≤n.
fuente
[-n,1/n-n..n]
Husk, 14 bytes
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.
fuente
JavaScript (Node.js), 73 bytes
Takes input asp and q are BigInt literals.
(p)(q)
, whereReturnspq=(p1q1)3+(p2q2)3+(p3q3)3 .
[[p1,q1],[p2,q2],[p3,q3]]
such thatTry it online!
Derivado de HW Richmond (1930), en las soluciones racionales de x 3 + y 3 + z 3 = R .
fuente
Haskell , 70 bytes
En Una introducción a la teoría de los números (por Hardy y Wright) hay una construcción que incluso incluye un parámetro racional. Para fines de golf, simplemente configuré este parámetro en 1 e intenté reducir lo más posible. Esto da como resultado la fórmula
Pruébalo en línea!
fuente
perl -Mbigrat -nE, 85 bytes
Puede guardar 8 bytes (el principal
$_=eval;
) si sabe que la entrada es un número entero; Esta parte es necesaria para que el programa obtenga una entrada del formulario308/1728
. La entrada se lee desde STDIN. Estoy usando la fórmula dada por @alephalpha.fuente