Giải pháp cơ bản của phương trình Pell


28

Cho một số nguyên dương không phải là một hình vuông, tìm giải pháp cơ bản của phương trình Pell liên quann(x,y)

x2-ny2= =1

Chi tiết

  • Cơ bản là một cặp số nguyên thỏa mãn phương trình trong đó là cực tiểu và dương. (Luôn có giải pháp tầm thường không được tính.)(x,y)x,yx(x,y)= =(1,0)
  • Bạn có thể giả sử rằng không phải là một hình vuông.n

Ví dụ

 n           x    y
 1           -    -
 2           3    2
 3           2    1
 4           -    -
 5           9    4
 6           5    2
 7           8    3
 8           3    1
 9           -    -
10          19    6
11          10    3
12           7    2
13         649    180
14          15    4
15           4    1
16           -    -
17          33    8
18          17    4
19         170    39
20           9    2
21          55    12
22         197    42
23          24    5
24           5    1
25           -    -
26          51    10
27          26    5
28         127    24
29        9801    1820
30          11    2
31        1520    273
32          17    3
33          23    4
34          35    6
35           6    1
36           -    -
37          73    12
38          37    6
39          25    4
40          19    3
41        2049    320
42          13    2
43        3482    531
44         199    30
45         161    24
46       24335    3588
47          48    7
48           7    1
49           -    -
50          99    14
51          50    7
52         649    90
53       66249    9100
54         485    66
55          89    12
56          15    2
57         151    20
58       19603    2574
59         530    69
60          31    4
61  1766319049    226153980
62          63    8
63           8    1
64           -    -
65         129    16
66          65    8
67       48842    5967
68          33    4
69        7775    936
70         251    30
71        3480    413
72          17    2
73     2281249    267000
74        3699    430
75          26    3
76       57799    6630
77         351    40
78          53    6
79          80    9
80           9    1
81           -    -
82         163    18
83          82    9
84          55    6
85      285769    30996
86       10405    1122
87          28    3
88         197    21
89      500001    53000
90          19    2
91        1574    165
92        1151    120
93       12151    1260
94     2143295    221064
95          39    4
96          49    5
97    62809633    6377352
98          99    10
99          10    1

Các trình tự OEIS có liên quan: A002350 A002349 A033313 A033317


Ngạc nhiên là chưa có bất kỳ thách thức nào với phương trình Pell, vì tôi nghĩ nó khá nổi tiếng. Ít nhất, tôi nhớ rằng đôi khi sử dụng nó với các thử thách Project Euler.
Kevin Cruijssen

@Firthize "Tuy nhiên, bạn có thể cho rằng không phải là một hình vuông.n " Có lẽ sẽ rõ ràng hơn nếu các trường hợp thử nghiệm bỏ qua những imho đó.
Kevin Cruijssen

2
@KevinCruijssen Tôi đã xem xét điều đó, nhưng tôi nghĩ sẽ khó hiểu hơn nếu bỏ qua một số ns. (btw Tôi cũng đã bị đầu hàng nhưng tôi đã có thử thách này trong hộp cát trong khoảng một năm)
flawr

Câu trả lời:


16

Piet , 612 codel

Mất n từ đầu vào tiêu chuẩn. Đầu ra y sau đó x , phân tách không gian.

Codel cỡ 1: Chương trình phương trình của Pell với kích thước codel 1

Codel size 4, để xem dễ dàng hơn: Chương trình phương trình của Pell với kích thước codel 1

Giải trình

Kiểm tra dấu vết NPiet này , cho thấy chương trình tính toán giải pháp cho giá trị đầu vào là 99.

Tôi không chắc liệu tôi đã từng nghe về phương trình của Pell trước thử thách này chưa, vì vậy tôi đã nhận được tất cả những điều sau đây từ Wikipedia; cụ thể, các phần của ba bài viết:

Về cơ bản, những gì chúng tôi làm là đây:

  1. Nhận n từ đầu vào tiêu chuẩn.
  2. Tìm nbằng cách tăng một bộ đếm cho đến khi hình vuông của nó vượt quán, sau đó giảm nó một lần. (Đây là vòng lặp đầu tiên bạn có thể thấy trong dấu vết, ở trên cùng bên trái.)
  3. Thiết lập một số biến để tính xy từ phần tiếp tục n .
  4. Kiểm tra xem xy phù hợp với phương trình của Pell chưa. Nếu có, hãy xuất các giá trị (đây là nhánh đi xuống khoảng 2/3 đường) và sau đó thoát (bằng cách chạy vào khối màu đỏ ở phía xa bên trái).
  5. Nếu không, lặp lại cập nhật các biến và quay lại bước 4. (Đây là vòng lặp rộng ở bên phải, quay lại phía dưới và nối lại không quá nửa chừng.)

Tôi thực sự không biết liệu một cách tiếp cận vũ phu sẽ ngắn hơn hay không, và tôi sẽ không thử nó! Được rồi, vì vậy tôi đã thử nó.


9

Piet , 184 codel

Đây là sự thay thế vũ phu mà tôi đã nói (trong câu trả lời khác của tôi ) mà tôi không muốn viết. Phải mất hơn 2 phút để tính toán giải pháp cho n = 13. Tôi thực sự không muốn thử nó trên n = 29 ... nhưng nó kiểm tra cho mỗi n đến 20, vì vậy tôi tự tin rằng nó đúng.

Giống như câu trả lời khác, câu hỏi này lấy n từ đầu vào tiêu chuẩn và đầu ra y rồi x , được phân tách bằng dấu cách.

Codel cỡ 1: Chương trình phương trình của Pell (biến thể brute-force) với kích thước codel 1

Codel size 4, để xem dễ dàng hơn: Chương trình phương trình của Pell (biến thể vũ lực) với kích thước codel 4

Giải trình

Đây là dấu vết NPiet cho giá trị đầu vào là 5.

Đây là sự tàn bạo nhất của lực lượng vũ phu, lặp đi lặp lại trên cả xy . Các giải pháp khác có thể lặp qua x và sau đó tính toán y=x21n , nhưng họwimps.

Bắt đầu từ x=2y=1 , điều này kiểm tra xem xy đã giải phương trình chưa. Nếu nó có (ngã ba ở phía dưới gần bên phải), nó xuất ra các giá trị và thoát.

Nếu không, nó tiếp tục rời đi, trong đó y được tăng lên và so với x . (Sau đó, có một số hướng đi đôi để đi theo con đường ngoằn ngoèo.)

So sánh cuối cùng này là nơi đường dẫn phân chia xung quanh giữa bên trái. Nếu chúng bằng nhau, x được tăng lên và y được đặt trở lại 1. Và chúng tôi quay lại để kiểm tra xem đó có phải là giải pháp chưa.

Tôi vẫn còn một số khoảng trắng có sẵn, vì vậy có lẽ tôi sẽ xem liệu tôi có thể kết hợp phép tính căn bậc hai đó mà không mở rộng chương trình hay không.


2
Haha Tôi đồng ý về các wimps sử dụng căn bậc hai: D
flawr

6

Brachylog , 16 byte

;1↔;Ċz×ᵐ-1∧Ċ√ᵐℕᵐ

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

Giải trình

;1↔                Take the list [1, Input]
   ;Ċz             Zip it with a couple of two unknown variables: [[1,I],[Input,J]]
      ×ᵐ           Map multiply: [I, Input×J]
        -1         I - Input×J must be equal to 1
          ∧        (and)
           Ċ√ᵐ     We are looking for the square roots of these two unknown variables
              ℕᵐ   And they must be natural numbers
                   (implicit attempt to find values that match those constraints)

5

Pari / GP , 34 byte

PARI / GP gần như có một built-in cho việc này: quadunitcung cấp cho các đơn vị cơ bản của lĩnh vực phương Q(D), trong đóDphân biệt đối xửcủa lĩnh vực. Nói cách khác,quadunit(4*n)giải quyết phương trình của Pellx2-ny2= =±1. Vì vậy, tôi phải lấy hình vuông khi định mức của nó là-1.

Tôi không biết nó sử dụng thuật toán gì, nhưng nó thậm chí hoạt động khi n không có hình vuông.

Câu trả lời được đưa ra trong các hình thức x + y*w, nơi wbiểu thị n .

n->(a=quadunit(4*n))*a^(norm(a)<0)

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


4

Ngôn ngữ Wolfram (Mathicala) , 46 byte

FindInstance[x^2-y^2#==1&&x>1,{x,y},Integers]&

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


1
Có đảm bảo rằng điều này luôn luôn tìm thấy giải pháp cơ bản ?
Greg Martin

@GregMartin đúng, đúng vậy. Điều này luôn tìm ra giải pháp (tối thiểu) đầu tiên. Trong trường hợp này, điều này luôn trả về {1,0}. Đó là lý do tại sao chúng ta phải chọn x> 1 và nhận giải pháp thứ hai (cơ bản)
J42161217

1
Tôi muốn điều đó là sự thật, nhưng dường như không có gì trong tài liệu chỉ ra rằng ....
Greg Martin

@GregMartin Tôi đã sử dụng chức năng này nhiều lần và đã biết nó hoạt động như thế nào. Mối quan tâm duy nhất của tôi là bỏ qua giải pháp đầu tiên và điều đó khiến tôi mất thêm 5 byte. Bạn có thể dễ dàng viết một chương trình và kiểm tra nó (chỉ để xác nhận hàng triệu kết quả)
J42161217

4

05AB1E , 17 16 14 byte

Đã lưu một byte nhờ Kevin Cruijssen .
Đầu ra[y, x]

∞.Δn*>t©1%_}®‚

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

Giải trình

∞                 # from the infinite list of numbers [1 ...]
 .Δ        }      # find the first number that returns true under
   n              # square
    *             # multiply with input
     >            # increment
      t©          # sqrt (and save to register as potential x)
        1%        # modulus 1
          _       # logical negation
            ®‚    # pair result (y) with register (x)

Và bạn đánh bại tôi vào nó một lần nữa .. có 17 byter là tốt, nhưng nó đã không làm việc vì Ųđang nghe trộm với số thập phân ..>. <Dù sao, bạn có thể loại bỏ cả hai ,và thêm một dấu (không, của dấu phẩy không phải là cùng; p) để lưu một byte.
Kevin Cruijssen

@KevinCruijssen: Cảm ơn! Vâng, tôi cũng đã Ųnhận thấy rằng nó không hoạt động như mong đợi.
Emigna

4

Java 8, 74 73 72 byte

n->{int x=1;var y=.1;for(;y%1>0;)y=Math.sqrt(-x*~++x/n);return x+" "+y;}

-1 byte nhờ @Arnauld .
-1 byte nhờ @ OlivierGrégoire .

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

Giải trình:

n->{                 // Method with double parameter and string return-type
  int x=1;           //  Integer `x`, starting at 1
  var y=.1;          //  Double `y`, starting at 0.1
  for(;y%1>0;)       //  Loop as long as `y` contains decimal digits:
    y=               //   Set `y` to:
      Math.sqrt(     //    The square-root of:
        -x*          //     Negative `x`, multiplied by
           ~++x      //     `(-x-2)` (or `-(x+1)-1)` to be exact)
                     //     (because we increase `x` by 1 first with `++x`)
               /n);  //     Divided by the input
  return x+" "+y;}   //  After the loop, return `x` and `y` with space-delimiter as result

1
72 byte , bằng cách thay đổi nthành a double, và xthành một int, chơi trên thực tế x*x-1là bằng (-x-1)*(-x+1).
Olivier Grégoire

Vâng, tôi thực sự đang chơi trên thực tế (x+1)*(x+1)-1là bằng -x*-(x+2), hoàn toàn chính xác.
Olivier Grégoire

3

R, 66 56 54 53 52 47 45 byte

một chương trình đầy đủ

n=scan();while((x=(1+n*T^2)^.5)%%1)T=T+1;x;+T

-1 -2 nhờ @Giuseppe

-7 cảm ơn @Giuseppe & @Robin Ryder -2 @JAD


1
sử dụng .5thay vì0.5
Giuseppe

5
46 byte . Tìm giá trị nhỏ nhất xtương đương với tìm giá trị nhỏ nhất của y. Điều này cho phép bạn lưu 2 byte vì thể hiện xdưới dạng yngắn hơn so với cách khác và 4 byte bằng cách sử dụng thủ thuật sử dụng Tđược khởi tạo ở 1.
Robin Ryder

1
@RobinRyder cuối cùng bạn có thể cần một +Tcái để đảm bảo rằng khi y==1nó trở lại 1thay vì TRUEnhưng tôi không hoàn toàn chắc chắn.
Giuseppe

3
@Giuseppe Phát hiện tốt! Bạn đúng rồi. Điều đó làm cho nó 47 byte
Robin Ryder

1
Có vẻ thất bại trên n = 61 (trường hợp thử nghiệm lớn ngớ ngẩn) do vấn đề số lượng lớn. Tôi nghĩ sẽ ổn khi cho phép giới hạn ngôn ngữ, chỉ cần lưu ý ngoại lệ.
CriminallyVulgar

3

Thạch , 40 byte

½©%1İ$<®‘¤$п¹;Ḋ$LḂ$?Ḟṭ@ṫ-ṚZæ.ʋ¥ƒØ.,U¤-ị

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

Một câu trả lời Jelly khác, ít chơi golf hơn nhưng hiệu quả hơn về mặt thuật toán khi x và y lớn. Điều này tìm thấy các điểm hội tụ của phần tiếp tục đều đặn xấp xỉ căn bậc hai của n, và sau đó kiểm tra xem phương trình nào giải phương trình Pell. Bây giờ tìm đúng thời gian của phân số tiếp tục thường xuyên.

Nhờ @TimPederick, tôi cũng đã triển khai một giải pháp dựa trên số nguyên sẽ xử lý bất kỳ số nào:

Thạch , 68 byte

U×_ƭ/;²®_$÷2ị$}ʋ¥µ;+®Æ½W¤:/$$
¹©Æ½Ø.;ÇƬṪ€F¹;Ḋ$LḂ$?ṭ@ṫ-ṚZæ.ʋ¥ƒØ.,U¤-ị

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

Ví dụ: giải pháp cho 1234567890 có 1936 và 1932 chữ số cho tử số và mẫu số tương ứng.


Tốt đẹp! Tôi đã có cách tiếp cận tương tự trong câu trả lời của tôi. Tôi không đọc Jelly, vì vậy tôi không chắc tại sao bạn gặp vấn đề với 61. Bạn có lưu trữ mỗi hội tụ dưới dạng một cặp số nguyên (tử số và mẫu số) không?
Tim Pederick

@TimPederick Có. Không chắc chắn vấn đề phát sinh ở đâu
Nick Kennedy

Tôi đã cố gắng học cách nó hoạt động để tôi có thể giúp gỡ lỗi nó, nhưng tôi không thể quấn đầu xung quanh nó! Chỉ có điều tôi có thể đề nghị được tham gia các sàn của bất kỳ phao nổi, vì (nếu điều này không sử dụng các thuật toán tương tự như mỏ) tất cả các giá trị trung gian nên đi ra như số nguyên anyway.
Tim Pederick

@TimPederick Đó là điểm không chính xác. Bây giờ tôi đã làm cho nó ngừng tìm kiếm tiếp tục của phần tiếp tục một khi nó đạt đến giai đoạn. Điều này hoạt động lên tới 150, nhưng ở trên tôi nghĩ rằng tôi lại gặp phải lỗi chính xác của dấu phẩy động tại ví dụ 151
Nick Kennedy

@TimPederick cũng là thế hệ của phần tiếp tục có vấn đề, không phải là sự hội tụ được thực hiện với số học số nguyên.
Nick Kennedy


2

TI-BASIC,  44  42 41 byte

Ans→N:"√(N⁻¹(X²-1→Y₁:1→X:Repeat not(fPart(Ans:X+1→X:Y₁:End:{X,Ans

n
(x,y)

y= =x2-1nx2
(x,y)ymod1= =0

Ví dụ:

6
               6
prgmCDGF12
           {5 2}
10
              10
prgmCDGF12
          {19 6}
13
              13
prgmCDGF12
       {649 180}

Giải trình:

Ans→N:"√(N⁻¹(X²+1→Y₁:1→X:Repeat not(fPart(Ans:X+1→X:Y₁:End:{X,Ans  ;full logic

Ans→N                                                              ;store the input in "N"
      "√(N⁻¹(X²+1→Y₁                                               ;store the aforementioned
                                                                   ; equation into the first
                                                                   ; function variable
                     1→X                                           ;store 1 in "X"
                         Repeat not(fPart(Ans          End         ;loop until "Ans" is
                                                                   ; an integer
                                              X+1→X                ;increment "X" by 1
                                                    Y₁             ;evaluate the function
                                                                   ; stored in this variable
                                                                   ; at "X" and leave the
                                                                   ; result in "Ans"
                                                           {X,Ans  ;create a list whose
                                                                   ; values contain "X" and
                                                                   ; "Ans" and leave it in
                                                                   ; "Ans"
                                                                   ;implicitly print "Ans"

Lưu ý: TI-BASIC là ngôn ngữ được mã hóa. Số lượng ký tự không bằng số byte.


2

MATL , 17 byte

`@:Ut!G*-!1=&fts~

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

Giải trình

Mã này tiếp tục gia tăng một bộ đếm k = 1, 2, 3, ... Đối với mỗi k , giải pháp x , y với 1 ≤ xk , 1 ≤ yk được tìm kiếm. Quá trình khi một số giải pháp nếu tìm thấy.

Thủ tục này được đảm bảo chỉ tìm thấy một giải pháp, đó chính xác là giải pháp cơ bản. Để xem tại sao, lưu ý rằng

  1. Mọi giải pháp x > 0, y > 0 với n > 1 đều thỏa mãn x > y .
  2. Nếu x , y là một giải pháp và x ', y ' là một giải pháp khác nhau thì nhất thiết phải là xx ' yy '.

Hậu quả của 1 và 2,

  • Khi thủ tục dừng ở một k cho trước , chỉ có một giải pháp tồn tại cho k đó , bởi vì nếu có hai giải pháp, một trong số chúng sẽ được tìm thấy trước đó và quá trình sẽ dừng lại với k nhỏ hơn .
  • Giải pháp này là giải pháp cơ bản, bởi vì, một lần nữa, nếu có một giải pháp có x nhỏ hơn thì nó sẽ được tìm thấy trước đó.

`       % Do...while
  @:U   %   Push row vector [1^2, 2^2, ..., k^2] where k is the iteration index
  t!    %   Duplicate and transpose. Gives the column vector [1^2; 2^2; ...; k^2]
  G*    %   Multiply by input n, element-wise. Gives [n*1^2; n*2^2; ...; n*k^2]
  -     %   Subtract with broadcast. Gives a square matrix of size n
  !     %   Transpose, so that x corresponds to row index and y to column index
  1=&f  %   Push row and column indices of all entries that equal 1. There can
        %   only be (a) zero such entries, in which case the results are [], [],
        %   or (b) one such entry, in which case the results are the solution x, y
  ts~   %   Duplicate, sum, negate. This gives 1 in case (a) or 0 in case (b)
        % End (implicit). Proceed with next iteration if top of the stack is true;
        % that is, if no solution was found.
        % Display (implicit). The stack contains copies of [], and x, y on top.
        % The empty array [] is not displayed

2

Python 2 , 49 byte

a=input()**.5
x=2
while x%a*x>1:x+=1
print x,x//a

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

Tìm xsố nhỏ nhất trên 1 trong đóx % sqrt(n) <= 1/x . Sau đó, tìm thấy ytừ xnhư y = floor(x / sqrt(n)).


2

Haskell , 46 byte

(x,y)x2-ny2= =1yx

f n=[(x,y)|x<-[1..],y<-[1..x],x^2-n*y^2==1]!!0

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


Có vẻ như bạn cần thay đổi nthành xtrong y<-[1..n]để bạn có thể tính toán f 13.
Christian Sievers

@ChristianSievers Cảm ơn bạn đã chỉ ra, tôi đã sửa nó!
flawr



1

Husk , 12 byte

ḟΛ¤ȯ=→*⁰□π2N

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

Giải trình

ḟΛ¤ȯ=→*⁰□π2N  Input is n, accessed through ⁰.
           N  Natural numbers: [1,2,3,4,..
         π2   2-tuples, ordered by sum: [[1,1],[1,2],[2,1],[1,3],[2,2],..
ḟ             Find the first that satisfies this:
 Λ             All adjacent pairs x,y satisfy this:
  ¤     □       Square both: x²,y²
   ȯ  *⁰        Multiply second number by n: x²,ny²
     →          Increment second number: x²,ny²+1
    =           These are equal.

1

MathGolf , 12 byte

ökî²*)_°▼Þ√î

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

Tôi đang ném một kinh Kính Mừng khi nói đến định dạng đầu ra. Nếu nó không được phép, tôi có một giải pháp dài hơn 1 byte. Định dạng đầu ra là x.0y, .0dấu phân cách giữa hai số.

Giải trình

ö       ▼      do-while-true with popping
 k             read integer from input
  î²           index of current loop (1-based) squared
    *          multiply the two
     )         increment (gives the potential x candidate
      _        duplicate TOS
       °       is perfect square
         Þ     discard everything but TOS
          √    square root
           î   index of previous loop (1-based)

Tôi lấy một số cảm hứng từ câu trả lời 05AB1E của Emigna, nhưng đã có thể tìm thấy một số cải tiến. Nếu dấu phân cách tôi chọn không được phép, hãy thêm khoảng trắng trước byte cuối cùng cho số byte là 13.


1

APL (NARS), 906 byte

r←sqrti w;i;c;m
m←⎕ct⋄⎕ct←0⋄r←1⋄→3×⍳w≤3⋄r←2⋄→3×⍳w≤8⋄r←w÷2⋄c←0
i←⌊(2×r)÷⍨w+r×r⋄→3×⍳1≠×r-i⋄r←i⋄c+←1⋄→2×⍳c<900⋄r←⍬
⎕ct←m

r←pell w;a0;a;p;q2;p2;t;q;P;P1;Q;c;m
   r←⍬⋄→0×⍳w≤0⋄a0←a←sqrti w⋄→0×⍳a≡⍬⋄m←⎕ct⋄⎕ct←0⋄Q←p←1⋄c←P←P1←q2←p2←0⋄q←÷a
L: t←p2+a×p⋄p2←p⋄p←t
   t←q2+a×q
   :if c≠0⋄q2←q⋄:endif
   q←t           
   P←(a×Q)-P
   →Z×⍳Q=0⋄Q←Q÷⍨w-P×P
   →Z×⍳Q=0⋄a←⌊Q÷⍨a0+P
   c+←1⋄→L×⍳(1≠Qׯ1*c)∧c<10000
   r←p,q
   :if c=10000⋄r←⍬⋄:endif
Z: ⎕ct←m

Ở trên có 2 hàm chức năng sqrti sẽ tìm thấy căn bậc hai và hàm vuông sẽ trả về lỗi Zilde và dựa trên việc đọc trang http://mathworld.wolfram.com/PellEquation.html nó sẽ sử dụng thuật toán để biết sqrt của một số trhu tiếp tục phân số (ngay cả khi tôi sử dụng một thuật toán để biết sqrt bằng phương pháp newton) và dừng lại khi nó tìm thấy p và q sao cho

 p^2-w*q^2=1=((-1)^c)*Qnext

Kiểm tra:

  ⎕fmt pell 1x
┌0─┐
│ 0│
└~─┘
  ⎕fmt pell 2x
┌2───┐
│ 3 2│
└~───┘
  ⎕fmt pell 3x
┌2───┐
│ 2 1│
└~───┘
  ⎕fmt pell 5x
┌2───┐
│ 9 4│
└~───┘
  ⎕fmt pell 61x
┌2────────────────────┐
│ 1766319049 226153980│
└~────────────────────┘
  ⎕fmt pell 4x
┌0─┐
│ 0│
└~─┘
  ⎕fmt pell 7373x
┌2───────────────────────────────────────────────────────────┐
│ 146386147086753607603444659849 1704817376311393106805466060│
└~───────────────────────────────────────────────────────────┘
  ⎕fmt pell 1000000000000000000000000000002x
┌2────────────────────────────────────────────────┐
│ 1000000000000000000000000000001 1000000000000000│
└~────────────────────────────────────────────────┘

Có giới hạn cho các chu kỳ trong vòng lặp trong hàm sqrti và giới hạn cho các chu kỳ cho vòng lặp trong hàm Pell, cả hai số trường hợp có thể là quá lớn hoặc algo không hội tụ ... (Tôi không biết nếu sqrti hội tụ mọi đầu vào có thể và chức năng Pell cũng vậy)



0

Bình thường, 15 byte

fsIJ@ct*TTQ2 2J

Hãy thử trực tuyến tại đây . Đầu ra xsau đó được yphân tách bằng một dòng mới.


0

Ngôn ngữ Wolfram (Mathicala) , 41 byte

{1//.y_/;!NumberQ[x=√(y^2#+1)]:>y+1,x}&

là ký tự Unicode 3 byte # 221A. Đưa ra giải pháp theo thứ tự (y, x) thay vì (x, y). Như thường lệ với sự không hoàn hảo//. lần lặp và giới hạn của nó, chỉ hoạt động trên các đầu vào trong đó giá trị thực của tối đa ylà 65538.

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


0

> <> , 45 byte

11v
+$\~:1
:}/!?:-1v?=1-*}:{*:@:{*:
$  naon;>

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

Thuật toán Brute force, tìm kiếm từ x=2trên xuống, với y=x-1và giảm dần trên mỗi vòng lặp, tăng dần xkhi yđạt đến 0. Đầu ra được xtheo sau y, cách nhau bởi một dòng mới.



0

Python 3 , 75 byte

lambda i:next((x,y)for x in range(2,i**i)for y in range(x)if~-x**2==i*y**2)

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

Giải trình

x<tôitôi
xtôi!

Mã này cũng sẽ chạy trong Python 2. Tuy nhiên, hàm phạm vi () trong Python 2 tạo ra một danh sách thay vì một trình tạo như trong Python 3 và do đó vô cùng kém hiệu quả.


Với thời gian và bộ nhớ inifinte, người ta có thể sử dụng một sự hiểu biết danh sách thay vì trình lặp và lưu 3 byte như vậy:

Python 3 , 72 byte

lambda i:[(x,y)for x in range(i**i)for y in range(x)if~-x**2==i*y**2][1]

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


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.