Раціональне розкладання a = xyz (x + y + z)


21

Запишіть функції x(a), y(a)і z(a)такі, що для будь-яких раціональних a всіх функцій повертають раціональні числа і x(a)*y(a)*z(a)*(x(a) + y(a) + z(a)) == a. Ви можете припустити, що ≥ 0.

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

Ви можете записати три названі функції x, y, z або написати три програми замість цього, якщо функції є громіздкими або відсутні для вашої мови. Ви також можете написати одну програму / функцію, яка повертає три числа x, y, z. Нарешті, якщо вам так зручніше, ви можете ввести / вивести раціональні числа у вигляді пари чисельника / знаменника. Ваш бал - це загальний розмір трьох функцій або трьох програм у байтах. Найменший рахунок виграє.

Насильницькі груби не дозволяються. Для будь-якого a = p / q, де p, q ≤ 1000 ваша програма повинна працювати протягом 10 секунд.


Приклад (це не означає, що ваш розклад повинен наводити ці числа):

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

Чи можемо ми записати одну функцію, яка виводить їх усі разом (скажімо, у масив)?
Leaky Nun

Чи можемо ми ввести чисельник і знаменник як два числа?
Leaky Nun

@LeakyNun Так і так.
orlp

1
Чи доцільно це зробити для будь-якого a?
Фаталізувати

2
Я припускаю, що ви не хочете демонструвати доказ, оскільки це дасть рішення, але ваше слово насправді не є доказом.
Фаталізувати

Відповіді:


10

CJam (59 байт)

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

Це анонімний блок (функція), який бере ціле чи подвійне на стек і створює масив з трьома подвійними. У ньому є два випадки для внутрішньої обробки всіх негативних входів, оскільки лише один випадок може перерватися на 0.25або 4. Він все одно перерви для входів -12і -1.3333333333333333, але специфікація дозволяє це ...

Онлайн демо виконує його , а потім складає значення, друкує всі чотири, і примножує їх , щоб показати , що він отримує початкове значення (помилка округлення по модулю).

Математичний фон

w=xyzx+y+z+w=0-хуzш=ахуzш+а=0

Elkies дає чотири сімейства наборів рішень. Ойлер:

х=6аст3(ат4-2с4)2(4ат4+с4)(2а2т8+10ас4т4-с8)у=3с5(4ат4+с4)22т(ат4-2с4)(2а2т8+10ас4т4-с8)z=2(2а2т8+10ас4т4-с8)3с3т(4ат4+с4)ш=-(2а2т8+10ас4т4-с8)6с3т(ат4-2с4)

Один, що стосується Ейлера:

х=(8с8+а2)(8с8-88ас4-а2)12с3(с4-а)(8с8+20ас4-а2)у=(8с8+а2)(8с8-88ас4-а2)12с3(8с4+а)(8с8+20ас4-а2)z=192ас5(с4-а)2(8с4+а)2(8с8+а2)(8с8-88ас4-а2)(8с8+20ас4-а2)ш=-3с(8с8+20ас4-а2)34(с4-а)(8с4+а)(8с8+а2)(8с8-88ас4-а2)

Більш простий:

х=(с4-4а)22с3(с4+12а)у=2а(3с4+4а)2с3(с4-4а)(с4+12а)z=с5+12ас2(3с4+4а)ш=-2с5(с4+12а)(с4-4а)(3с4+4а)

І один, що пов'язаний з цим:

х=с5(с4-3а)32(с4+а)(с12+12ас8-3а2с4+2а3)у=с12+12ас8-3а2с4+2а32с3(с4-3а)(3с4-а)z=2а(с4+а)2(3с4-а)2с3(с4-3а)(с12+12ас8-3а2с4+2а3)ш=-2с(с12+12ас8-3а2с4+2а3)(с4-3а)(с4+а)(3с4-а)

Зауважте, що кожна сім'я має принаймні два знаменники форми pс4-qа за позитив p і q: оскільки всі задіяні терміни раціональні, це означає, що є позитив адля якого ми отримуємо ділення на нуль. Тому ми повинні використовувати щонайменше два набори рішень, які мають свої особливості при різних значенняха. Інтуїтивно зрозуміти, що найкраще вибрати два набори з однієї родини. Я вибрав найпростішу сім'ю (третю) з параметрамис=1 і с=2.


1

Аксіома, 191 байт

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))

Саме переклад формули звіту Пітера Тейлора на цій сторінці з деяким кодом зробив би знаменники не 0. Один тест

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