Théorème de Ryley

13

S. Ryley a prouvé le théorème suivant en 1825:

Chaque nombre rationnel peut être exprimé comme une somme de trois cubes rationnels.

Défi

Étant donné un nombre rationnel rQ trouver trois nombres rationnels a,b,cQ tels que

r=a3+b3+c3.

Détails

Votre soumission devrait être en mesure de calculer une solution pour chaque entrée avec suffisamment de temps et de mémoire, ce qui signifie que, par exemple, deux 32 bits intreprésentant une fraction ne suffisent pas.

Exemples

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

flawr
la source
1
J'ai eu quelque chose qui fonctionnait en quelque sorte dans Japt, mais il a souvent rencontré une erreur "trop ​​de récursivité". Probablement parce que la stratégie consistait à "obtenir des nombres aléatoires, essayez à nouveau jusqu'à ce qu'ils soient une bonne réponse".
Kamil Drakari
1
Exiger la prise en charge de bignum exclut inutilement beaucoup de langues et / ou nécessite beaucoup de passe-partout gaspillés pour les implémenter
Sparr
2
@Sparr C'était un choix délibéré, car la sortie pouvait être assez "grande" même pour des entrées simples, ou selon la méthode que vous utilisez, les valeurs intermédiaires dans le calcul pouvaient également être très grandes. Donc, travailler avec des nombres de précision arbitraires était un point important pour ce défi (et probablement assez souvent dans d'autres défis de théorie des nombres aussi).
flawr
1
Serait-il acceptable de sortir [p1,p2,p3,q], interprété comme ? (p1q)3+(p2q)3+(p3q)3
Arnauld
Dans la même veine, les trois nombres rationnels produits doivent-ils être sous leur forme la plus simple?
Quintec

Réponses:

10

Pari / GP , 40 octets

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

Essayez-le en ligne!


La même longueur, la même formule:

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

Essayez-le en ligne!


Cette formule est donnée dans: Richmond, H. (1930). Sur les solutions rationnelles de x3+y3+z3=R . Actes de la Edinburgh Mathematical Society, 2(2), 92-100.

r=(27r3+127r29r+3)3+(27r3+9r127r29r+3)3+(27r2+9r27r29r+3)3

Vérifiez-le en ligne!

alephalpha
la source
1
-5 octets car vous pouvez changer l'ordre des sommations
Black Owl Kai
1
@BlackOwlKai Le numérateur de la deuxième somme est , pas - 27 r 2 + 9 r - 1 . 27r3+9r127r2+9r1
alephalpha
8

Haskell , 95 89 76 69 68 octets

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

Essayez-le en ligne!

Solution bruteforce simple. Il teste tous les triplets de nombres rationnels de la forme

(a1n,a2n,a3n)with nainn.

  • On peut toujours supposer que les trois nombres rationnels ont le même dénominateur, puisque
    (a1n1,a2n2,a3n3)=(a1n2n3n1n2n3,a2n1n3n1n2n3,a3n1n2n1n2n3).
  • nainn
    ain=aiNnN
    N
Delfad0r
la source
Que fait le "IOU"?
Solomon Ucko
@SolomonUcko Rien de spécial, c'est aussi bon que n'importe quelle autre liste de longueur 3
Delfad0r
@ H.PWiz Je n'ai pas pu trouver de consensus sur Meta pour savoir si l'hypothèse d'une entrée dactylographiée est acceptée, mais j'ai quand même trouvé un moyen de raccourcir le code sans cette hypothèse. Merci!
Delfad0r
4
@ Delfad0r Il existe un "consensus" selon lequel vous n'avez pas à compter une importation possible, qui n'est nécessaire que pour construire le type requis, si vous n'avez explicitement besoin de rien de cette importation pour définir votre fonction. (Et vous pouvez supposer que le type correct est transmis à votre fonction, lors de son appel.)
flawr
1
Enregistrer un octet en utilisant[-n,1/n-n..n]
Christian Sievers
6

Husk , 14 octets

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

Solution simple de force brute. Essayez-le en ligne!

Explication

La division dans Husk utilise des nombres rationnels par défaut et les produits cartésiens fonctionnent correctement pour des listes infinies, ce qui en fait un programme très simple.

ḟ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
la source
2

JavaScript (Node.js) , 73 octets

Prend l'entrée comme (p)(q), oùp et q sont des littéraux BigInt.

Renvoie [[p1,q1],[p2,q2],[p3,q3]]tel quepq=(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])

Essayez-le en ligne!

Dérivé de HW Richmond (1930), A Solutions rationnelle de x 3 + y 3 + z 3 = R .

Arnauld
la source
2

Haskell , 70 octets

Dans une introduction à la théorie des nombres (par Hardy et Wright), il y a une construction qui inclut même un paramètre rationnel. À des fins de golf, je viens de définir ce paramètre sur 1 et j'ai essayé de réduire autant que possible. Il en résulte la formule

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]

Essayez-le en ligne!

flawr
la source
1

perl -Mbigrat -nE, 85 octets

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

Vous pouvez enregistrer 8 octets (le début $_=eval;) si vous savez que l'entrée est un entier; cette partie est nécessaire pour que le programme saisisse une entrée du formulaire 308/1728. L'entrée est lue depuis STDIN. J'utilise la formule donnée par @alephalpha.


la source