Pell Denkleminin Temel Çözümü


28

Kare olmayan bazı pozitif tamsayılar n göz önüne alındığında , ilişkili Pell denkleminin temel çözümünü (x,y) bulun.

x2-ny2=1

ayrıntılar

  • Temel (x,y) bir tamsayı çifti olan x,y aşağıdaki denkleme uygun x az ve pozitiftir. (Her zaman önemsiz bir çözüm vardır (x,y)=(1,0) .
  • n bir kare olmadığını varsayabilirsin .

Örnekler

 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

İlgili OEIS dizileri: A002350 A002349 A033313 A033317


Pell denklemiyle ilgili herhangi bir sorun olmadığını düşündüm, çünkü oldukça iyi biliniyordum. En azından bazen Project Euler zorluklarıyla kullandığımı hatırlıyorum.
Kevin Cruijssen

@Fatalize " Eğer bir kare olmadığını varsayabilirsin .n " Test davaları bu imho'ları atlarsa muhtemelen daha açık olurdu.
Kevin Cruijssen

2
@KevinCruijssen Bunu düşündüm, ancak bazı ns ihmal etmek daha kafa karıştırıcı olacağını düşündüm . (btw Ben de surprized edildi ama kum havuzunda yaklaşık bir yıl bu zorluğu
yaşadım

Yanıtlar:


16

Piet , 612 kodlayıcı

Alır n standart girişten. Çıktıları y sonra x , boşlukla ayrılmış.

Codel boyutu 1: Pell'in codel büyüklüğü ile denklem programı 1

Codel size 4, daha kolay görüntüleme için: Pell'in codel büyüklüğü ile denklem programı 1

açıklama

99 giriş değeri için çözümü hesaplayan programı gösteren bu NPiet izine göz atın .

Bu meydan okumadan önce Pell'in denklemini hiç duyup duymadığımdan emin değilim, bu yüzden Wikipedia'dan aşağıdakilerin hepsini aldım; özellikle, üç makalenin bu bölümleri:

Temel olarak, yaptığımız şey şudur:

  1. Standart girişten n alın .
  2. bulnKare aşana kadar bir sayacın saymayan, daha sonra bir kez olarak azaltmak. (Bu, izlemede, sol üstte görebileceğiniz ilk döngüdür.)
  3. Hesaplamak için bazı değişkenleri ayarlama x ve y sürekli fraksiyondan n .
  4. x ve y Pell'in denklemine uyup uymadığını kontrol edin . Eğer öyleyse, değerleri (bu yolun yaklaşık 2 / 3'ü kadar aşağı doğru olan daldır) çıkın ve sonra (en soldaki kırmızı bloğa koşarak) çıkın.
  5. Değilse, değişkenleri yinelemeli olarak güncelleyin ve 4. adıma geri dönün. (Bu sağdaki geniş halkadır, alttan arkaya ve tam olarak yarı yarıya değil.)

Açıkçası kaba kuvvet yaklaşımının daha kısa olup olmayacağı konusunda hiçbir fikrim yok ve denemek üzere değilim! Tamam, denedim.


9

Piet , 184 kod çözücü

Bu, kaba kuvvet alternatifidir ( diğer cevabımda ) yazmak istemediğim. Çözümü n = 13 olarak hesaplamak 2 dakikadan fazla sürüyor . N = 29 için denemek istemiyorum ... ama 20'ye kadar her n için kontrol ediyor, bu yüzden doğru olduğuna eminim.

Diğer cevaplar gibi, bu da n'yi standart girdiden alır ve y'den sonra x'e boşlukla ayrılmış çıktılar .

Codel boyutu 1: Pell denklem programı (kaba kuvvet varyantı) codel size 1

Codel size 4, daha kolay görüntüleme için: Pell denklem programı (kaba kuvvet varyantı) codel 4 ile

açıklama

İşte 5 giriş değeri için NPiet izi .

Bu, her iki yineleme, kaba kuvvet en acımasız x ve y . Diğer çözümler x üzerinde yinelenebilir ve y = √ değerini hesaplayabilir.y=x2-1n , ama onlarkorkak.

İtibaren x=2 ve y=1 , bu olup olmadığını kontrol eder, x ve y henüz denklemi çözdük. Eğer (sağ alt köşedeki çatal) varsa, değerleri çıkarır ve çıkar.

Değilse, y arttığı ve x ile karşılaştırıldığı yerde kalır . (Sonra zig-zag yolunu izleyebilmek için bazı yuvarlananlar var.)

Bu son karşılaştırma, yolun orta-orta soldan ayrıldığı yerdir. Eşitleri varsa, x artar ve y olarak geri ayarlanır. Ve yine de bir çözüm olup olmadığını kontrol etmeye geri döneriz.

Hala elimde boş bir alan var, o yüzden belki programı büyütmeden o karekök hesaplamayı dahil edip edemediğimi göreceğim.


2
Haha
Karekökleri

6

Brachylog , 16 bayt

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

Çevrimiçi deneyin!

açıklama

;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 bayt

: PARI / GP neredeyse yerleşik bir bunun için vardır quadunitveren temel birimi arasında kuadratik alan S(D),Dolanayırt edicialanının. Başka bir deyişle,quadunit(4*n)Pell'in denkleminix2-ny2=±1çözer. Bu yüzden norm olduğu zaman kareye çıkmalıyım-1.

Hangi algoritmayı kullandığını bilmiyorum ama n kare olmadığında bile çalışıyor .

Yanıtlar şeklinde verilir x + y*w, wO anlamına gelir n .

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

Çevrimiçi deneyin!


4

Wolfram Dili (Mathematica) , 46 bayt

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

Çevrimiçi deneyin!


1
Bunun her zaman temel çözümü bulduğundan emin misiniz?
Greg Martin,

@GregMartin evet, öyle. Bu her zaman ilk (minimum) çözümü bulur. Bu durumda bu her zaman {1,0} değerini döndürür. Bu nedenle x> 1 seçip ikinci (temel) çözümü
bulmalıyız

1
Bunun doğru olmasını isterdim, ancak belgelerdeki hiçbir şey bunu göstermiyor gibi görünüyor ....
Greg Martin

@GregMartin Bu işlevi birçok kez kullandım ve nasıl çalıştığını zaten biliyordum. Tek endişem ilk çözümü atlamaktı ve bu bana 5 ekstra bayta mal oldu. Kolayca bir program yazıp test edebilirsiniz (yalnızca milyonlarca sonucu onaylamak için)
J42161217

4

05AB1E , 17 16 14 bayt

Kevin Cruijssen sayesinde bir bayt kaydedildi .
çıktılar[y, x]

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

Çevrimiçi deneyin!

açıklama

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

Ve beni yine yendin .. 17 byte da vardı, ama işe yaramadı çünkü onluklarla doluydu Ų..>. <Her neyse, ikisini de kaldırabilir ,ve bir iz ekleyebilirsin (hayır, virgül değil. Aynı; p) bir baytı kaydetmek için.
Kevin Cruijssen

@KevinCruijssen: Teşekkürler! Evet Ų, beklendiği gibi çalışmadığını da farkettim.
Emigna

4

Java 8, 74 73 72 bayt

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

@Arnauld sayesinde -1 bayt . @ OlivierGrégoire
sayesinde -1 bayt .

Çevrimiçi deneyin.

Açıklama:

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 bayt , değiştirerek nbir etmek doubleve xbir için intaslında oynayan, x*x-1eşittir (-x-1)*(-x+1).
Olivier Grégoire

Aslında, tamamen doğru olmak (x+1)*(x+1)-1için -x*-(x+2), eşittir gerçeği üzerinde oynuyorum .
Olivier Grégoire

3

R, 66 56 54 53 52 47 45 bayt

tam bir program

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

@Giuseppe sayesinde -1 -2

-7 @Giuseppe & @Robin Ryder -2 @JAD sayesinde


1
.5yerine kullanın0.5
Giuseppe

5
46 bayt . En küçük değerini xbulmak, en küçük değerini bulmakla eşdeğerdir y. Bu ifade çünkü 2 bayt kaydetmenize olanak tanır xaçısından ybaşka bir yol daha kısadır ve kullanmanın hile kullanarak 4 byte T1'de başlatılır
Robin Ryder

1
@RobinRyder +Tsonunda yerine y==1döndüğünden emin olmak için sonunda bir ihtiyacınız olabilir 1, TRUEancak tam olarak emin değilim.
Giuseppe

3
@Giuseppe Peki benekli! Haklısın. Bu 47 bayt
Robin Ryder

1
Çok sayıda sorun nedeniyle n = 61 (aptalca büyük test durumu) başarısız görünüyor. Bence, istisnaya dikkat çekerek, dil sınırlamalarına izin vermek iyi.
CriminallyVulgar

3

Jöle , 40 bayt

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

Çevrimiçi deneyin!

Alternatif bir Jelly cevabı, daha az golf gibi fakat x ve y büyük olduğunda algoritmik olarak daha verimli. Bu, n'nin kareköküne yaklaşan düzenli sürekli kesimin yakınsaklarını bulur ve daha sonra Pell denklemini çözen kontrolleri yapar. Şimdi düzenli sürekli kesir periyodu doğru bulur.

@TimPederick sayesinde, aynı zamanda herhangi bir sayı ile başa çıkması gereken tam sayı tabanlı bir çözüm de uyguladım:

Jöle , 68 bayt

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

Çevrimiçi deneyin!

Örneğin, 1234567890 için olan çözüm , pay ve payda için sırasıyla 1936 ve 1932 hanelere sahiptir.


Güzel! Cevabımda da aynı yaklaşımı kullandım. Jelly'i okumam, o yüzden neden 61 ile sorun yaşamanız konusunda emin değilim. Her bir yakınsayı bir çift tamsayı olarak saklıyor musunuz (pay ve payda)?
Tim Pederick,

@TimPederick Evet. Sorunun nerede ortaya çıktığından emin değilim
Nick Kennedy 19

Nasıl çalıştığını öğrenmeye çalıştım, böylece hata ayıklamayı başarabildim, ama kafamı dolaştıramadım! (Bu eğer önerebilirsiniz tek şey beri, herhangi yüzen zemin alıyor yapar tüm ara değerler zaten tamsayı olarak çıkması gerekir benimle aynı algoritmayı kullanın).
Tim Pederick

@TimPederick Kayan nokta yanlışlığıydı. Şimdi, süreye ulaştıktan sonra devam eden kesimin daha fazla devam etmesini aramayı durdurdum. Bu 150'ye kadar çalışıyor, ama yukarıda tekrar ediyorum ki, örneğin 151
Nick Kennedy'de

@TimPederick ayrıca, tamsayı aritmetiği ile yapılan yakınsaklardan değil, sorunlu devam eden kesimin neslidir.
Nick Kennedy,


2

TI-BASIC,  44  42 41 bayt

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)yşık1=0

Örnekler:

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

Açıklama:

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"

Not: TI-BASIC belirtilmiş bir dildir. Karakter sayısı bayt sayısına eşit değil .


2

MATL , 17 bayt

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

Çevrimiçi deneyin!

açıklama

Kod, bir sayacı arttırmaya devam ediyor k = 1, 2, 3, ... Her k için , x , y ile 1 ≤ xk , 1 ≤ yk ile aranır. İşlem olduğunda bazı çözümler bulunursa.

Bu prosedür, tam olarak temel olan tek bir çözüm bulmak için garanti edilir. Nedenini görmek için

  1. Herhangi bir çözüm x > 0, y > 0 , n > 1 tatmin x > y .
  2. Eğer x , y bir çözüm ve x ', y ' farklı bir çözüm ise, o zaman mutlaka xx ' ve yy ' olur.

1 ve 2'nin bir sonucu olarak,

  • Prosedür belli bir durduğunda k , sadece tek bir çözüm bunun için var k bunlardan biri daha önce bulunmuş olur iki çözüm olsaydı, çünkü süreç daha küçük olan durduruldu olurdu k .
  • Bu çözüm temel çözümdür, çünkü, eğer daha küçük x ile bir çözüm olsaydı daha önce bulunmuş olurdu.

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

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

Çevrimiçi deneyin!

Bulur x1 burada yukarıda küçük sayı olarak x % sqrt(n) <= 1/x. Ardından bulur ydan xolarak y = floor(x / sqrt(n)).


2

Haskell , 46 bayt

(x,y)x2-ny2=1yx

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

Çevrimiçi deneyin!


Değiştirmeniz gereken gibi görünüyor niçin xde y<-[1..n]size hesaplayabilir böylece f 13.
Christian Sievers

@ ChristianSievers İşaretlediğiniz için teşekkürler, düzeltdim!
kusur,



1

Kabuğu , 12 bayt

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

Çevrimiçi deneyin!

açıklama

ḟΛ¤ȯ=→*⁰□π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 bayt

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

Çevrimiçi deneyin!

Çıktı formatlama konusunda Hail Mary'yi fırlatıyorum. İzin verilmezse, 1 byte daha uzun bir çözüme sahibim. Çıktı formatı, iki sayı arasındaki ayırıcının x.0yolduğu yerdir .0.

açıklama

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

Emigna'nın 05AB1E yanıtından ilham aldım, ancak bazı iyileştirmeler bulabildim. Seçtiğim ayırıcıya izin verilmiyorsa, 13 baytlık bir sayı için son bayttan önce bir boşluk ekleyin.


1

APL (NARS), 906 bayt

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

Yukarıda, kare karekökü ve pell işlevinin hata için Zilde'yi döndürdüğü 2 işlev sqrti işlevi vardır ve http://mathworld.wolfram.com/PellEquation.html sayfasını okumak için algo kullanır. bir sayı trhu'nun sqrt'ı (kesimi devam ettirir (newton yöntemini kullanarak sqrt'ı bilmek için bir algo kullansam bile) ve p ve q bulduğu zaman dur

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

Ölçek:

  ⎕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│
└~────────────────────────────────────────────────┘

Sqrti işlevindeki döngüde döngü için bir sınır ve Pell işlevinde döngü için döngü için bir sınır vardır, her ikisi de olası vaka numarası için çok büyüktür veya algo yakınsak değil ... (sqrti olup olmadığını bilmiyorum mümkün olan her girişi ve aynı Pell işlevini birleştirir.



0

Pyth, 15 bayt

fsIJ@ct*TTQ2 2J

Burada çevrimiçi deneyin . Çıktı daha xsonra ybir newline ile ayrılır.


0

Wolfram Dili (Mathematica) , 41 bayt

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

3 bayt Unicode karakter # 221A'dır. Çözümü (x, y) yerine (y, x) sırayla verir. Kusurlu olan zamanki gibi //.gerçek değeri nerede ve onun sınırlı tekrarlamalar, sadece girişlerin üzerinde çalışır y65.538 en fazla olduğunu.

Çevrimiçi deneyin!


0

> <> , 45 bayt

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

Çevrimiçi deneyin!

Brute kuvvet algoritması, x=2yukarıdan arayarak y=x-1, her döngü üzerinde ve azaltarak, 0'a ulaştığında artış gösterir x. yÇıktı, yeni bir satırla ayrılarak xtakip edilir y.



0

Python 3 , 75 bayt

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

Çevrimiçi deneyin!

açıklama

x<benben
xben!

Bu kod aynı zamanda Python 2'de de çalışacaktır. Bununla birlikte, Python 2'deki range () işlevi Python 3'teki gibi bir jeneratör yerine bir liste oluşturur ve bu nedenle son derece yetersizdir.


Belirsiz zaman ve hafıza ile, yineleyici yerine bir liste kavrama kullanılabilir ve bu şekilde 3 bayt tasarruf edilebilir:

Python 3 , 72 bayt

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

Çevrimiçi deneyin!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.