Помилкові монументи


9

Існує рівняння, припускаючи nі xє позитивним,

рівняння

що виражає взаємозв'язок між двома одночленами, один з яких є загальним викривленням іншого. Багато людей роблять просту помилку, прирівнюючи їх (тобто 3x^2і (3x)^2).

Виклик

Давши додатне ціле число, iвизначте і поверніть рішення nі xз найменшою сумою як масив [n, x]. Що стосується краватки, будь-який набір рішення прийнятний.

Випробування

62658722541234765
[15, 11]

202500
[4, 15]

524288
[8, 4]

33044255768277
[13, 9]

Чи можемо ми повернутися [x, n]замість [n, x]?
Фаталізувати

Також, чи є обмеження у часі?
Фаталізувати

nі xцілі числа, правда?
Луїс Мендо

Вихід у формі [n, x]і немає обмежень у часі @Fatalize
Zach Gates

Так, nі xцілі числа @LuisMendo
Zach Gates

Відповіді:


5

Брахілог , 35 байт

,[N:X]#>>==L(.rMtT;Lr.rMtT),M^:T*?,

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

Пояснення

Ми побудуємо список [N, X], де N >= Xпотім, присвоївши йому значення, спробуємо як [N, X]і [X, N]як можливий вихід. Наприклад, якщо Nотримує призначене 3, ми будемо тестувати через повернення [3, 1], [1, 3], [3, 2], [2, 3], [3, 3]і [3, 3]. Після цього наступний крок зворотного відтворення відбудеться за значенням N, на яке перейде і 4т.д.

,[N:X]     The list [N, X]
#>         Both N and X are strictly positive
>=         N >= X
=L         Assign values to N and X, and L = [N, X]
(          Either...
    .          Output = L
    rM         M is the reverse of the Output
    tT         T is the second element of M
;          ...or...
    Lr.        Output is the reverse of L
    rM         M = L
    tT         T is the last element of M
),
M^         First element of M to the power of the second element of L (T)...
:T*?,      ... times T is equal to the Input

5

Математика, 61 байт

Завдяки милям за економію 2 байтів, а також цілу купу байтів, які я нарахував без причини!

Last@Select[{n,(#/n)^(1/n)}~Table~{n,2Log@#},IntegerQ@*Last]&

Обчислює таблицю пар {n, x}, де x = (i / n) ^ (1 / n), використовуючи всі можливі значення n; зберігає лише ті, для яких відповідний х є цілим числом; потім повертає пару з найбільшим значенням n.

Тут "всі можливі значення n" коливаються від 1 до 2 * ln (i). Це ігнорує рішення {n, x} = {i, 1}, але це нормально, оскільки рішення {n, x} = {1, i} буде достатньо, якщо це найкращий вибір. Отже, x ніколи не має бути меншим за 2, а це означає, що n * 2 ^ n ≤ i, а всі такі n менше 2 * ln (i).

За допомогою числення можна показати, що пара {n, x}, яка мінімізує їх суму в цьому контексті, така сама, як пара {n, x} з найбільшим n (не рахуючи {i, 1}). Ось чому початковий Lastдосить хороший, щоб знайти оптимальну пару.


1
Ви можете скласти умову тесту, використовуючи IntegerQ@*Lastдля збереження 2 байти, але я також нараховую 63, а не 86 байт у цій поточній версії.
милі

3

MATL , 22 байти

`T@XK:"@K@-@^*G=?3Mb~.

Виходи x, nв такому порядку.

Введення обмежено типом doubleданих за замовчуванням MATL , який може точно відображати цілі числа до 2^53лише. Це виключає перший тест (все-таки він дає правильний результат, але це взагалі не може бути гарантоване для таких великих входів).

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

Пояснення

У коді використовуються дві вкладені петлі:

  • Зовнішня do...whileпетля проходить через всі можливі суми n+xв порядку збільшення. Цикл буде припинено, як тільки знайдеться рішення. Це гарантує, що ми виводимо рішення з мінімальною сумою.
  • Внутрішня for eachпетля перевіряє все nі xз цією сумою. Коли сума збігається з входом, внутрішній цикл закінчується, а стан циклу зовнішньої петлі встановлюється falseтаким чином, щоб вийшов і один.

Коментований код:

`         % Do...while
  T       %   Push "true". Will be used as loop condition (possibly negated to exit loop)
  @       %   Push iteration index, say K, which represents n+x
  XK      %   Copy that into clipboard K
  :       %   Range [1 2 ... K]
  "       %   For each
    @     %     Push loop variable (1, 2, ... K), which represents n
    K@-   %     Compute x as K minus n
    @     %     Push n again
    ^*    %     Power, multiply. This gives n*x^n
    G=    %     Does this equal the input?
    ?     %     If so
      3M  %       Push the inputs of the third-last function, that is, x and n
      b   %       Bubble up the "true" that is at the bottom of the stack
      ~   %       Transform it into "false". This will exit the do...while loop
      .   %       Break the for loop
          %     Implicitly end if
          %   Implicitly end for
          % Implicitly end do...while
          % Implicitly display

2

Желе , 23 16 байт

×*@¥/=³
ṗ2ÇÐfSÞḢ

Враховуючи i, це генерує всі цілі пари з заміною в [1, i]. Потім воно виконує ту саму фільтрацію та сортування, що і в попередньому розчині, показаному нижче. Оскільки немає обмежень у часі, груба сила працюватиме дано достатньо часу.

Спробуйте в Інтернеті! , але не пробуйте великих цінностей в Інтернеті.

На моєму ПК, щоб зарахувати результат i = 2048використання неефективної версії , потрібно 6 хвилин .

Ефективна версія

Це попереднє рішення на 23 байти, яке здатне швидко вирішити великі значення.

×*@¥/=³
ÆDµṚ*İ⁸żḞÇÐfSÞḢ

Дано i, обчислює дільники, iщоб генерувати пари, [n, x]де nє дільник і x = floor( (i/n)^(1/n) ). Потім фільтрує його за значеннями, де n * x^n == iсортуйте решта пар за їх сумою та повертає першу пару.

Спробуйте в Інтернеті! або Перевірте всі тестові випадки.

Пояснення

×*@¥/=³  Helper link. Input: list [n, x]
    /    Reduce using
   ¥       A dyadic chain
 *@        Compute x^n
×          Multiply by n
      ³  The initial value i
     =   Test if n * x^n == i

ṗ2ÇÐfSÞḢ  Main link (16 byte version). Input: integer i
ṗ2        Generate all pairs of integers in [1, i]
  ÇÐf     Filter for where the helper link is true
     SÞ   Sort them by their sum
       Ḣ  Return the first result

ÆDµṚ*İ⁸żḞÇÐfSÞḢ  Main link (23 byte version). Input: integer i
ÆD               Compute the divisors of i
  µ              Begin a new monadic chain operating on the divisors
   Ṛ             Reverse the divisors
     İ           Reciprocal of each divisors
    *            Raise each in the reversed divisors to the reciprocal of a divisor
      ⁸          Get the divisors
       ż         Interleave the divisors with the previous powers
        Ḟ        Floor each
         ÇÐf     Filter for where the helper link is true
            SÞ   Sort them by their sum
              Ḣ  Return the first result

1

PHP, 104 байт

for(;1<$x=(($i=$argv[1])/++$n)**(1/$n);)!($x==ceil($x))?:$a[$x+$n]="[$x, $n]";ksort($a);echo$a[key($a)];

Це виводить усі можливі рішення не у запропонованому форматі 73 Байт

for(;1<=$x=(($i=$argv[1])/++$n)**(1/$n);)!($x==ceil($x))?:print"$x,$n\n";

1

Perl, 52 байти

Включає +2 для -ap

Введіть дані про STDIN

mono.pl <<< 33044255768277

mono.pl:

#!/usr/bin/perl -ap
$_=("@F"/++$.)**(1/$.)while!/\./?$\="$. $_":$_>2}{

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

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