পাইথাগোরিয়ান ট্রিপল সিকোয়েন্স


33

একজন পিথাগোরাস ট্রিপল তিনটি ধনাত্মক পূর্ণসংখ্যা নিয়ে গঠিত A, B, এবং গ, এই ধরনের একটি 2 + খ 2 = C 2 । এই জাতীয় ট্রিপল সাধারণত (ক, খ, গ) লেখা হয় এবং একটি সুপরিচিত উদাহরণ (3, 4, 5)। যদি (ক, খ, সি) পাইথাগোরিয়ান ট্রিপল হয় তবে কোনও ধনাত্মক পূর্ণসংখ্যার কে (ক, কেবি, কেসি) হয়। একটি আদিম পাইথাগোরিয়ান ট্রিপল হ'ল এটিতে ক, খ এবং সি কপিরাইট হয়

এই জ্ঞানটি ব্যবহার করে আমরা সর্বনিম্ন দৈর্ঘ্যের ট্রিপলকে এক সাথে শৃঙ্খলাবদ্ধ করে একটি ক্রম তৈরি করতে পারি, যেখানে ক্রমের পরবর্তী উপাদানটি সর্বকনিষ্ঠতম পাইথাগোরিয়ান ট্রিপলটির সংক্ষিপ্ত আকারের বৃহত্তর পাইথাগোরিয়ান ট্রিপল যার দৈর্ঘ্যের মধ্যে সর্বনিম্ন হিসাবে এটি রয়েছে।

সবচেয়ে ছোট আদিম পাইথাগোরিয়ান ট্রিপল (3, 4, 5) দিয়ে শুরু করুন। ক্রমটি শুরু হয় 3এবং হাইপোপেনিজ (ক্রমের পরবর্তী উপাদান) হয় 5। তারপরে 5পা হিসাবে ছোটতম আদিম পাইথাগোরিয়ান ট্রিপলটি সন্ধান করুন এবং আপনি পান (5, 12, 13)। তাই ধারাবাহিকতা অব্যাহত থাকে 13

হয় সিক্যুয়েন্সটি চিরতরে আউটপুট করুন, বা একটি পূর্ণসংখ্যার ইনপুট নিন nএবং nক্রমের প্রথম উপাদানগুলি শূন্য বা একটি সূচীত হয় output

কমপক্ষে এবং এর মাধ্যমে আপনাকে আউটপুট সমর্থন করতে হবে 28455997তবে আপনি যে ধরণের ডেটা ব্যবহার করছেন সেটি হঠাৎ করে উত্থাপিত হলে, সেই নতুন সীমাটির জন্য কাজ করা দরকার। সুতরাং আপনি সংখ্যার একটি তালিকা হার্ড কোড করতে পারবেন না।

3
5
13
85
157
12325
90733
2449525
28455997
295742792965
171480834409967437
656310093705697045
1616599508725767821225590944157
4461691012090851100342993272805
115366949386695884000892071602798585632943213
12002377162350258332845595301471273220420939451301220405

ওইআইএস এ 239381

অনুরূপ ক্রম (এই আউটপুট না!):


কোন সময় সীমা আছে?
লুভজো

@ লভজো না, তবে আপনার আউটপুটটি সঠিক কিনা তা আপনার জানা / প্রমাণ করা উচিত। কিছু অনুরূপ ক্রম রয়েছে যেখানে আউটপুট পরে আলাদা হয় 12325
mbomb007

একই ধরণের ক্রমটির পরে আমি আলাদা হওয়ার কথা ভাবছি 85... এর পরবর্তী শব্দটি হ'ল 3613(আপনি কী এখনও এটি অনুমান করতে পারেন?)
নীল

@ নীল একটি দ্রুত অনুসন্ধান পাইথাগোরিয়ান সর্পিল A053630 উপার্জন করেছে। আমি যদিও দু'টিকেই চ্যালেঞ্জের মধ্যে উল্লেখ করেছি, কারণ আমার বাস্তবায়ন করতে গিয়ে কাজ করতে গিয়ে আমি ঘটনাক্রমে দু'টি ক্রম বা তার মতোই পৌঁছেছি।
mbomb007

1
প্রকৃতপক্ষে, আমি যদি আরও জাগ্রত হতাম তবে আমি নিজেই এটি সন্ধান করতে পারতাম ...
নীল

উত্তর:


11

জেলি , 19 বাইট

o3ṄÆF*/€ŒPP€²+Ṛ$HṂß

@ ডেনিসকে একটি অসীম অনুক্রমের রিফ্যাক্টর করে একটি বাইট ধন্যবাদ সংরক্ষণ করা ।

কোনও ইনপুট এবং আর্গুমেন্ট নেয় না, তারপরে প্রতিটি টার্ম মুদ্রণ করে ক্রমটিকে অসীমভাবে আউটপুট করে it সংখ্যাটি বৃহত্তর হওয়ার সাথে সাথে এই পদ্ধতিটি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে সংখ্যা বাড়তে থাকে যেহেতু এটি প্রাথমিক কারণের উপর নির্ভর করে।

এটি অনলাইন চেষ্টা করুন!

এটি বর্তমান পদটির প্রধান শক্তি গুণককে গণনা করে পরবর্তী পদটি গণনা করে। 12325 জন্য, এই হল {5 2 , 17, 29}। পাইথাগোরিয়ান ট্রিপল { a , b , c }, গণনার জন্য ইউক্লিডের সূত্রের বৈকল্পিক রয়েছে is

formula

যেখানে এম > এন এবং ট্রিপল আদিম হয় যদি এম এবং এন কপিরাইম হয়।

পরবর্তী আদিম রুটটি 12325 থেকে গণনা করতে, m এবং n সন্ধান করুন যে mn = 12325 এবং এম , এন বেছে নিন যাতে gcd ( m , n ) = 1 থাকে। তারপরে 2 5 2 এর সমস্ত উপসর্গ তৈরি করে সমস্ত জোড় মি , এন তৈরি করুন , 17, 29} এবং subse 1, 25, 17, 29, 425, 725, 493, 12325} যে সাবসেটগুলির প্রত্যেকটির পণ্য সন্ধান করুন} তারপরে প্রতিটি মান এবং জোড় দিয়ে 12325 ভাগ করুন যাতে প্রতিটি জোড়া এম , এন হয় । প্রতিটি জোড়া ব্যবহার করে সি এর সূত্রটি গণনা করুন এবং সর্বনিম্ন যা 90733 is

  • পূর্ববর্তী পদ্ধতিটি 228034970321525477033478437478475683098735674620405573717049066152557390539189785244849203205 এর পরে পরবর্তী পদটি নির্ধারণের জন্য ব্যর্থ হয়েছিল The যখন সঠিক পছন্দটি তৃতীয় এবং শেষ প্রাইমস ছিল তখন পূর্ববর্তী পদ্ধতিটি একটি গুণক হিসাবে শেষ মানটি বেছে নিয়েছিল। নতুন পদ্ধতিটি ধীরে ধীরে তবে সর্বদা কাজ করবে যেহেতু এটি সর্বনিম্ন অনুমানের সন্ধান করতে সমস্ত জোড়া কপিরাইট পরীক্ষা করে।

ব্যাখ্যা

o3ṄÆF*/€ŒPP€²+Ṛ$HṂß  Main link. Input: 0 if none, else an integer P
o3                   Logical OR with 3, returns P if non-zero else 3
  Ṅ                  Println and pass the value
   ÆF                Factor into [prime, exponent] pairs
     */€             Reduce each pair using exponentation to get the prime powers
        ŒP           Powerset of those
          P€         Product of each
            ²        Square each
               $     Monadic chain
             +         Add vectorized with
              Ṛ        the reverse
                H    Halve
                 Ṃ   Minimum
                  ß  Call recursively on this value

বাহ, এটা সত্যিই দ্রুত!
mbomb007

1
o3ṄÆfµṪ,P²SHßঅসীম আউটপুট সহ একটি বাইট সংরক্ষণ করে।
ডেনিস

5

ব্র্যাচল্যাগ , 36 বাইট

3{@wB:?>:^a+~^=C:B:?:{$pd}ac#d,C:1&}

এটি অনলাইন চেষ্টা করুন!

টিআইও আউটপুট ফ্লাশ করার আগে আপনাকে প্রোগ্রামটি শেষ হওয়ার (1 মিনিট) অপেক্ষা করতে হবে। এসডাব্লুআই-প্রোলোগের আরপিএলে এই মানগুলি খুঁজে পাওয়ার সাথে সাথে এটি মুদ্রণ করে।

এটি ক্রমটি চিরকাল মুদ্রণ করবে।

অফলাইনে এসডাব্লুআই-প্রোলোগের দোভাষীর কয়েক মিনিটের পরে, আমি 90733পরে পেয়েছি 12325। আমি এই পয়েন্ট পরে এটি বন্ধ।

এটি সম্পূর্ণ ব্রুটফোর্স নয় কারণ এটি পাইথাগোরিয়ান ট্রিপলগুলি সন্ধান করতে সীমাবদ্ধতা ব্যবহার করে, যদিও এটি স্পষ্টতই গতির জন্য অনুকূলিত নয়।

ব্যাখ্যা

3{                                 }    Call this predicate with 3 as Input
  @w                                    Write the Input followed by a line break
    B:?>                                B > Input
           +                            The sum...
        :^a                             ...of Input^2 with B^2...
            ~^                          ...must equal a number which is itself a square
              =C                        Assign a fitting value to that number and call it C
               C:B:?:{$pd}a             Get the lists of prime factors of C, B and Input
                                          without duplicates
                           c#d,         Concatenate into a single list; all values must be
                                          different
                               C:1&     Call recursively with C as Input

4

পার্ল, 73 বাইট

for($_=3;$_<1e9;$_=$a**2+$b**2){$a++until($b=($_+$a**2)**.5)==($b|0);say}

সমস্ত পাইথাগোরিয়ান ট্রিপস কিছু পূর্ণসংখ্যার জন্য a²+b²=c²সন্তুষ্ট । কখন এবং ঠিক একজনের 2 দ্বারা বিভাজ্য হওয়ার সাথে কপিরাইট হয়, তারপরে আদিম ট্রিপল হয়, যেখানে সমস্ত জুটিযুক্ত কপিরাইট হয়।a=r(m²-n²), b=2rmn, c=r(m²+n²)r,m,nr=1m,na,b,ca,b,c

এটিকে মাথায় রেখে, কিছু দেওয়া হলেও a, আমি একটি বর্গক্ষেত্রের nমতো ক্ষুদ্রতম গণনা করতে একটি ব্রুট-ফোর্স অ্যালগরিদম ব্যবহার করি । তারপরে, সমান ।a²-n²cn²+m²


আপনার ব্যাখ্যায় সম্ভাব্য টাইপো: আপনার জন্য অনুসন্ধান nযেমন যে a+n²একটি বর্গক্ষেত্র হয়।
নীল

2

পাইথন 3, 178 বাইট

from math import*
p,n=[3,5],int(input())
while len(p)<n:
 for i in range(p[-1],p[-1]**2):
  v=sqrt(i**2+p[-1]**2)
  if v==int(v)and gcd(i,p[-1])==1:
   p+=[int(v)];break
print(p)

এটি মূলত কেবল একটি ব্রুট ফোর্স অ্যালগরিদম, এবং এইভাবে খুব ধীর হয়। এটি ইনপুট হিসাবে আউটপুটে পদগুলির পরিমাণ নেয়।

আমি এই অ্যালগরিদমের সঠিকতা সম্পর্কে 100% নিশ্চিত নই, প্রোগ্রামটি প্রথম লেগের স্কোয়ার পর্যন্ত অন্য লেগের জন্য পরীক্ষা করে, যা আমার বিশ্বাস যথেষ্ট, তবে আমি গণিতটি করি নি।

Repl.it এ চেষ্টা করুন! (পুরানো) (দয়া করে 10 এর বেশি সংখ্যার জন্য এটি চেষ্টা করবেন না, এটি খুব ধীর হবে)


আপনি পাইথন 3.5 এ পরিবর্তন করতে পারেন এবং ব্যবহার করতে পারেন math.gcdp+=[...]পরিবর্তে ব্যবহার করুন p.append(...)। এবং <2পরিবর্তে ==1। এবং ifসব এক লাইনে থাকতে পারে।
mbomb007

1
আমার প্রস্তাবিত সর্বশেষ 2 টি উন্নতি আপনি এখনও করতে পারেন।
mbomb007


লুভজো, আপনি পরামর্শগুলি ব্যবহার করে আপনার কোডটি গল্ফ করবেন?
mbomb007

2

এমএটিএল , 27 বাইট

Ii:"`I@Yyt1\~?3MZdZdq]}6MXI

এটি ক্রমের প্রথম পদ তৈরি করে। ইনপুট 0-ভিত্তিক।

কোডটি খুব অদক্ষ। অনলাইন সংকলক এর চেয়ে বেশি ইনপুটগুলির জন্য সময় শেষ করে 5। ইনপুটটি 6দেড় মিনিট অফলাইন নিয়েছে (এবং সঠিক উত্পাদন করেছে) produced90733 --তম শব্দ হিসাবে )।

এটি অনলাইন চেষ্টা করুন!

I            % Push 3 (predefined value of clipboard I)
i            % Input n
:"           % For each (i.e. execute n times)
  `          %   Do...while
    I        %     Push clipboard I. This is the latest term of the sequence
    @        %     Push iteration index, starting at 1
    Yy       %     Hypotenuse of those two values
    t1\      %     Duplicate. Decimal part
    ~?       %     If it is zero: we may have found the next term. But we still
             %     need to test for co-primality
      3M     %       Push the two inputs of the latest call to the hypotenuse 
             %       function. The stack now contains the hypotenuse and the
             %       two legs
      ZdZd   %       Call GCD twice, to obtain the GCD of those three numbers
      q      %       Subtract 1. If the three numbers were co-prime this gives
             %       0, so the do...while loop will be exited (but the "finally" 
             %       part will be executed first). If they were not co-prime  
             %       this gives non-zero, so the do...while loop proceeds 
             %       with the next iteration
    ]        %     End if
             %     If the decimal part was non-zero: the duplicate of the 
             %     hypotenuse that is now on the top of the stack will be used
             %     as the (do...while) loop condition. Since it is non-zero, 
             %     the loop will proceed with the next iteration
  }          %   Finally (i.e. execute before exiting the do...while loop)
    6M       %     Push the second input to the hypotenuse function, which is
             %     the new term of the sequence
    XI       %     Copy this new term into clipboard I
             %   Implicitly end do...while
             % Implicitly end for each
             % Implicitly display the stack, containing the sequence terms

2

র‌্যাকেট 106 বাইট

(let p((h 3))(println h)(let p2((i 1))(define g(sqrt(+(* h h)(* i i))))(if(integer? g)(p g)(p2(add1 i)))))

Ungolfed:

(define (f)
  (let loop ((h 3))
    (let loop2 ((i 1))
      (define g (sqrt (+(* h h) (* i i))))
      (if (not(integer? g))
          (loop2 (add1 i))
          (begin (printf "~a ~a ~a~n" h i g)
                 (loop g))))))

পরীক্ষামূলক:

(f)

গল্ফ সংস্করণ আউটপুট:

3
5
13
85
157
12325
12461
106285
276341
339709
10363909
17238541

অবারিত সংস্করণ আউটপুট:

3 4 5
5 12 13
13 84 85
85 132 157
157 12324 12325
12325 1836 12461
12461 105552 106285
106285 255084 276341
276341 197580 339709
339709 10358340 10363909
10363909 13775220 17238541

(আমার মেশিনে এটির পরে ত্রুটি)


The golfed code prints out only hypotenuse of sequence. Ungolfed versions shows all three to clarify triplets not mentioned in question.
rnso


1

PHP, 139 bytes

for($k=3;$i=$k,print("$k\n");)for($j=$i+1;($k=sqrt($m=$i*$i+$j*$j))>(int)$k||gmp_intval(gmp_gcd(gmp_gcd((int)$i,(int)$j),(int)$k))>1;$j++);

The above code breaks after 28455997 on 32-bit systems. If higher numbers are needed, it becomes 156 bytes:

for($k=3;$i=$k,print("$k\n");)for($j=$i+1;!gmp_perfect_square($m=bcadd(bcpow($i,2),bcpow($j,2)))||gmp_intval(gmp_gcd(gmp_gcd($i,$j),$k=bcsqrt($m)))>1;$j++);

1

Java 8, 133 Bytes

-25 bytes thanks to miles Using n*n instead of Math.pow(n, 2)

-24 bytes thanks to miles Using for loops instead of while, changing datatype, eliminating () due to order of operations

()->{long b=3,c,n;for(;;){for(n=1;;n++){c=b+2*n*n;double d=Math.sqrt(c*c-b*b);if(d==(int)d&b<d){System.out.println(b);break;}}b=c;}};

Uses the fact that

Relation

for any pair of integers m > n > 0. Therefore, C is equal to A plus 2(N)2. The function above finds the least value of N that satisfies this relation, while making the second element of the Pythagorean triple an integer and greater than the first element. Then it sets the value of the first element to the third element and repeats with the updated first element.

Ungolfed:

void printPythagoreanTriples() {
    long firstElement = 3, thirdElement, n;
    while (true) {
        for (n = 1; ; n++) {
            thirdElement = firstElement + (2 * n * n);
            double secondElement = Math.sqrt(thirdElement * thirdElement - firstElement * firstElement);
            if (secondElement == (int) secondElement && firstElement < secondElement) {
                System.out.println("Found Pythagorean Triple [" +
                        firstElement + ", " +
                        secondElement + ", " +
                        thirdElement + "]");
                break;
            }
        }
        firstElement = thirdElement;
    }
}

Ideone it!

*The ideone does not print the last required element due to time limits, however as you can see through the logic of the program and the ungolfed version (which prints the 28455997 as the third element of the previous Pythagorean triple rather than the first element of the next), the values are, with a higher time limit, printed.


Couldn't you use n*n instead of Math.pow(n,2)?
miles

I don't know why I didn't think of that... I'll add that right away. Thank you @miles
Mario Ishac

I shaved some more off using for loops to get it down to 133 bytes ()->{long b=3,c,n;for(;;){for(n=1;;n++){c=b+2*n*n;double d=Math.sqrt(c*c-b*b);if(d==(int)d&b<d){System.out.println(b);break;}}b=c;}};
miles

1

Python 3.5, 97 bytes

Wrong output after 28455997, because of the limits of the floating point data type. The sqrt function isn't good enough, but if the precision was magically increased, it'd work.

Pretty simple to understand. Incrementing c by two instead of one cuts the runtime in half, and only odd numbers need to be checked anyway, because the elements are always odd.

import math
c=a=3
while 1:
	c+=2;b=(c*c-a*a)**.5;i=int(b)
	if math.gcd(a,i)<2<a<b==i:print(a);a=c

Try it online

The program cannot be run on Ideone, because Ideone uses Python 3.4


For output to stay accurate longer, I'd have to use decimal:

import math
from decimal import*
c=a=3
while 1:
	c+=2;b=Decimal(c*c-a*a).sqrt();i=int(b)
	if i==b>a>2>math.gcd(a,i):print(a);a=c

Try it online

To stay accurate indefinitely, I could do something horrid like this (increasing the precision required every single iteration:

import math
from decimal import*
c=a=3
while 1:
	c+=2;b=Decimal(c*c-a*a).sqrt();i=int(b);getcontext().prec+=1
	if i==b>a>2>math.gcd(a,i):print(a);a=c



1

APL(NARS), 169 chars, 338 bytes

h←{{(m n)←⍵⋄(mm nn)←⍵*2⋄(2÷⍨nn+mm),(2÷⍨nn-mm),m×n}a⊃⍨b⍳⌊/b←{⍵[2]}¨a←a/⍨{(≤/⍵)∧1=∨/⍵}¨a←(w÷a),¨a←∪×/¨{k←≢b←1,π⍵⋄∪{b[⍵]}¨↑∪/101 1‼k k}w←⍵}⋄p←{⍺=1:⍵⋄⍵,(⍺-1)∇↑h ⍵}⋄q←{⍵p 3x}

test ok until 14 as argument of q:

  q 1
3 
  q 2
3 5 
  q 10
3 5 13 85 157 12325 90733 2449525 28455997 295742792965 
  q 12
3 5 13 85 157 12325 90733 2449525 28455997 295742792965 171480834409967437 656310093705697045 
  q 13
3 5 13 85 157 12325 90733 2449525 28455997 295742792965 171480834409967437 656310093705697045 
  1616599508725767821225590944157 
  q 14
NONCE ERROR
  q 14
  ∧

this below would find all divisors of its argument...

∪×/¨{k←≢b←1,π⍵⋄∪{b[⍵]}¨↑∪/101 1‼k k}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.