Теорема Райлі


13

С. Рілей довів наступну теорему в 1825 році:

Кожне раціональне число можна виразити у вигляді суми трьох раціональних кубів.

Виклик

З огляду на деяке раціональне число rQ знайдіть три раціональні числа a,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, але це часто стикалося з помилкою "занадто багато рекурсії". Можливо, тому, що стратегія полягала в тому, щоб "отримати випадкові числа, спробуйте ще раз, поки вони не знайдуть правильну відповідь".
Каміль Дракарі

1
Потрібна підтримка bignum без потреби виключає багато мов та / або потребує великої кількості витрачених котлоустановок для їх впровадження
Sparr

2
@Sparr Це був обдуманий вибір, оскільки вихід може бути досить "великим" навіть для простих входів, або залежно від того, який метод ви використовуєте, проміжні значення в обчисленні також можуть бути дуже великими. Тож робота з довільними точними числами була важливим моментом для цього виклику (і, мабуть, досить часто і в інших теоріях чисел - викликів теж).
flawr

1
Чи було б прийнятним вихід [p1,p2,p3,q], інтерпретуючи як ? (p1q)3+(p2q)3+(p3q)3
Арнольд

Чи повинні тримати виходячи з цього числа раціональних чисел у найпростішій формі?
Квінтек

Відповіді:


10

Парі / 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]

Спробуйте в Інтернеті!


x3+y3+z3=R

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

Перевірте це в Інтернеті!


1
-5 байт, тому що ви можете змінити порядок виплат
Чорна сова Кай

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

Спробуйте в Інтернеті!

(a1n,a2n,a3n)with nainn.

  • (a1n1,a2n2,a3n3)=(a1n2n3n1n2n3,a2n1n3n1n2n3,a3n1n2n1n2n3).
  • nainn
    ain=aiNnN
    N

Що робить "IOU"?
Соломон Учко

@SolomonUcko Нічого особливого, це так само добре, як і будь-який інший список довжиною 3
Delfad0r

@ H.PWiz Я не зміг знайти консенсусу щодо Meta щодо того, чи приймається введене введене введення, але я все ж знайшов спосіб скоротити код без цього припущення. Спасибі!
Delfad0r

4
@ Delfad0r Існує "консенсус", що вам не доведеться рахувати можливий імпорт, який потрібен лише для побудови потрібного типу, якщо для визначення вашої функції явно не потрібно нічого з цього імпорту. (І ви можете припустити, що правильний тип передається вашій функції, коли він викликається.)
flawr

1
Збережіть один байт, скориставшись[-n,1/n-n..n]
Крістіан Сіверс

6

Лушпиння , 14 байт

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

Просте рішення грубої сили. Спробуйте в Інтернеті!

Пояснення

Відділення в Хуск використовує раціональні числа за замовчуванням, і декартові продукти правильно працюють для нескінченних списків, що робить це дуже простою програмою.

ḟ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 байти

Вводиться як (p)(q), деp і q є літературами BigInt.

Повертає [[p1,q1],[p2,q2],[p3,q3]]таке, що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])

Спробуйте в Інтернеті!

Похідне від HW Річмонд (1930), Про раціональних рішень х 3 + у 3 + Z 3 = R .


2

Haskell , 70 байт

У вступі до Теорії чисел (Харді та Райт) є конструкція, яка навіть включає раціональний параметр. Для цілей гольфу я просто встановив цей параметр на 1 і намагався максимально зменшити його. Це призводить до формули

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]

Спробуйте в Інтернеті!


1

perl -Mbigrat -nE, 85 байт

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

Ви можете зберегти 8 байт (головний $_=eval;), якщо знаєте, що вхід є цілим числом; ця частина потрібна для того, щоб програма grok вводила форму 308/1728. Введення зчитується з STDIN. Я використовую формулу, подану @alephalpha.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.