Đơn thức hiểu sai


9

Có tồn tại một phương trình, giả sử nxlà tích cực,

phương trình

điều đó thể hiện mối quan hệ giữa hai đơn thức, một là sự hiểu sai phổ biến của nhau. Nhiều người mắc sai lầm đơn giản khi đánh đồng những thứ này (tức là 3x^2(3x)^2).

Thử thách

Cho một số nguyên dương, ixác định và trả về giải pháp nxvới tổng nhỏ nhất là một mảng [n, x]. Trong trường hợp hòa, bất kỳ bộ giải pháp nào cũng được chấp nhận.

Các trường hợp thử nghiệm

62658722541234765
[15, 11]

202500
[4, 15]

524288
[8, 4]

33044255768277
[13, 9]

Chúng ta có thể trở lại [x, n]thay vì [n, x]?
Gây tử vong

Ngoài ra, có bất kỳ hạn chế thời gian?
Gây tử vong

nxsố nguyên, phải không?
Luis Mendo

Đầu ra ở dạng [n, x]và không có ràng buộc về thời gian @Firthize
Zach Gates

Có, nxlà số nguyên @LuisMendo
Zach Gates

Câu trả lời:


5

Brachylog , 35 byte

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

Hãy thử trực tuyến!

Giải trình

Chúng tôi xây dựng một danh sách [N, X], ở đó N >= X, sau đó sau khi gán giá trị cho nó, chúng tôi thử cả hai [N, X][X, N]đầu ra có thể. Ví dụ, nếu Nđược giao nhiệm vụ 3, chúng tôi sẽ kiểm tra thông qua backtracking [3, 1], [1, 3], [3, 2], [2, 3], [3, 3][3, 3]. Sau đó, bước quay lại tiếp theo sẽ xảy ra trên giá trị của N, sẽ đi đến 4, v.v.

,[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

Toán học, 61 byte

Nhờ dặm cho tiết kiệm 2 byte, cộng với một bó toàn bộ các byte tôi đếm không có lý do!

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

Tính một bảng các cặp {n, x}, trong đó x = (i / n) ^ (1 / n), sử dụng tất cả các giá trị có thể có của n; chỉ giữ lại những cái mà x tương ứng là một số nguyên; sau đó trả về cặp có giá trị lớn nhất là n.

Ở đây, "tất cả các giá trị có thể có của n" nằm trong khoảng từ 1 đến 2 * ln (i). Điều này bỏ qua giải pháp {n, x} = {i, 1}, nhưng không sao vì giải pháp {n, x} = {1, i} sẽ đủ nếu đó là lựa chọn tốt nhất. Vì vậy, x không bao giờ cần phải nhỏ hơn 2, có nghĩa là n * 2 ^ n i và tất cả n như vậy đều nhỏ hơn 2 * ln (i).

Người ta có thể hiển thị bằng phép tính rằng cặp {n, x} thu nhỏ tổng của chúng trong ngữ cảnh này giống với cặp {n, x} với n lớn nhất (không tính {i, 1}). Đó là lý do ban đầu Lastđủ tốt để tìm ra cặp tối ưu.


1
Bạn có thể soạn điều kiện kiểm tra bằng cách sử dụng IntegerQ@*Lastđể lưu 2 byte, nhưng tôi cũng đếm 63 chứ không phải 86 byte trong phiên bản hiện tại này.
dặm

3

MATL , 22 byte

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

Đầu ra là x, ntheo thứ tự đó.

Đầu vào bị giới hạn bởi doubleloại dữ liệu mặc định của MATL , có thể biểu thị chính xác các số nguyên tối đa 2^53. Điều này không bao gồm thử nghiệm đầu tiên (tuy nhiên, nó cho kết quả chính xác, nhưng nói chung không thể được đảm bảo cho các đầu vào quá lớn).

Hãy thử trực tuyến!

Giải trình

Mã sử ​​dụng hai vòng lặp lồng nhau:

  • do...whileVòng lặp bên ngoài đi qua tất cả các khoản tiền có thể n+xtheo thứ tự tăng dần. Vòng lặp sẽ được dừng lại ngay khi tìm thấy giải pháp. Điều này đảm bảo rằng chúng tôi đưa ra giải pháp với tổng tối thiểu.
  • for eachVòng lặp bên trong kiểm tra tất cả nxvới tổng đó. Khi tổng trùng với đầu vào, vòng lặp bên trong được thoát ra và điều kiện vòng lặp của vòng lặp bên ngoài được đặt thành falsesao cho một vòng lặp cũng được thoát ra.

Mã nhận xét:

`         % 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

Thạch , 23 16 byte

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

Cho trước i, điều này tạo ra tất cả các cặp số nguyên với sự thay thế trong [1, i]. Sau đó, nó thực hiện việc lọc và sắp xếp tương tự như trong giải pháp trước đây được hiển thị bên dưới. Vì không có hạn chế về thời gian, lực lượng vũ phu sẽ làm việc đủ thời gian.

Hãy thử trực tuyến! , nhưng đừng thử giá trị lớn trực tuyến.

Trên máy tính của tôi, mất khoảng 6 phút để tính kết quả cho i = 2048việc sử dụng phiên bản không hiệu quả.

Phiên bản hiệu quả

Đây là giải pháp trước đây cho 23 byte có thể giải quyết các giá trị lớn một cách nhanh chóng.

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

Cho i, tính toán các ước của iđể tạo ra các cặp trong [n, x]đó nlà một ước và x = floor( (i/n)^(1/n) ). Sau đó, lọc nó cho các giá trị trong đó n * x^n == i, sắp xếp các cặp còn lại theo tổng của chúng và trả về cặp đầu tiên.

Hãy thử trực tuyến! hoặc Xác minh tất cả các trường hợp thử nghiệm.

Giải trình

×*@¥/=³  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 byte

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

Điều này xuất ra tất cả các giải pháp có thể không ở định dạng đề xuất 73 Byte

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

1

Perl, 52 byte

Bao gồm +2 cho -ap

Cung cấp đầu vào trên STDIN

mono.pl <<< 33044255768277

mono.pl:

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

Mất một số nỗ lực để làm cho nó hoạt động 1quá. Tôi không biết nếu lỗi dấu phẩy động có thể khiến điều này trả về câu trả lời sai cho một số đầu vào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.