Pitagorasa potrójne składa się z trzech dodatnich liczb całkowitych a, b i c, tak, że 2 + b 2 = C 2 . Taki potrójny jest powszechnie pisany (a, b, c), a dobrze znanym przykładem jest (3, 4, 5). Jeśli (a, b, c) jest potrójną pitagorejską, to tak samo jest (ka, kb, kc) dla dowolnej dodatniej liczby całkowitej k. Pierwotna Pitagorasa potrójna jest to, w którym A, B i C są względnie pierwsze .
Korzystając z tej wiedzy, możemy stworzyć sekwencję, łącząc ze sobą najmniejsze długości potrójnych elementów, przy czym następnym elementem w sekwencji jest przeciwprostokątna (największa liczba) najmniejszej prymagorejskiej potrójnej potrójnej zawierająca poprzedni element jako najmniejszą z jego długości.
Zacznij od najmniejszej pierwotnej potrójnej pitagorejskiej potrójnej (3, 4, 5). Sekwencja zaczyna się od 3
, a przeciwprostokątna (następny element w sekwencji) to 5
. Następnie znajdź najmniejszą prymitywną trójkę pitagorejską 5
jako nogę, a otrzymasz (5, 12, 13). Tak więc sekwencja trwa 13
.
Albo wypisuj sekwencję na zawsze, albo weź liczbę całkowitą n
i wyślij pierwsze n
elementy sekwencji, zero lub jeden indeksowany.
Musisz obsłużyć dane wyjściowe przynajmniej poprzez włącznie 28455997
, ale jeśli nagle nagle zostanie przekroczony limit używanego typu danych, będzie musiał pracować dla tego nowego limitu. Nie można więc na stałe zakodować listy liczb.
3
5
13
85
157
12325
90733
2449525
28455997
295742792965
171480834409967437
656310093705697045
1616599508725767821225590944157
4461691012090851100342993272805
115366949386695884000892071602798585632943213
12002377162350258332845595301471273220420939451301220405
Podobne sekwencje (nie wysyłaj ich!):
12325
.85
... jej następnym terminie jest3613
(czy możesz zgadnąć, co to jeszcze jest?)Odpowiedzi:
Galaretka , 19 bajtów
Oszczędność bajtu dzięki @ Dennisowi poprzez refaktoryzację do nieskończonej sekwencji.
Nie bierze żadnych danych wejściowych i argumentów, a następnie generuje sekwencję nieskończenie, drukując każdy termin podczas ich obliczania. Ta metoda zwalnia, gdy liczby stają się większe, ponieważ zależy od faktoryzacji liczby pierwszej.
Wypróbuj online!
Oblicza to następny termin, obliczając faktoryzację mocy pierwotnej bieżącego terminu. Dla 12325 jest to {5 2 , 17, 29}. Istnieje wariant wzoru Euclida do obliczania trójek pitagorejskich { a , b , c },
gdzie m > n, a potrójna jest prymitywna iff m i n są pierwszymi.
W celu obliczenia następnego pierwiastkiem pierwotnym od 12325 online m i n , takich, że MN = 12325, a wybrać m , n , tak że GCD ( m , n ) = 1. Następnie generuje wszystkie pary m , n , tworząc wszystkie podzbiory {5 2 , 17, 29} i znalezienie produktu każdego z tych podzbiorów, które są {1, 25, 17, 29, 425, 725, 493, 12325}. Następnie podziel 12325 przez każdą wartość i parę, aby każda para miała m , n . Obliczyć wzór dla c przy użyciu każdej pary i przyjąć minimum, które wynosi 90733.
Wyjaśnienie
źródło
o3ṄÆfµṪ,P²SHß
z nieskończonym wyjściem oszczędza bajt.Brachylog , 36 bajtów
Wypróbuj online!
Musisz poczekać na przekroczenie limitu czasu programu (1 minuta), zanim TIO opróżni wyjście. W REPL SWI-Prologa drukuje się, jak tylko znajdzie wartość.
Spowoduje to wydrukowanie sekwencji na zawsze.
Po kilku minutach na offline tłumacza SWI-Prolog uzyskałem
90733
po12325
. Po tym punkcie przestałem.To nie jest pełna bruteforce, ponieważ wykorzystuje ograniczenia, aby znaleźć tróje pitagorejskie, chociaż oczywiście nie jest zoptymalizowana pod kątem prędkości.
Wyjaśnienie
źródło
Perl, 73 bajty
Wszystkie trójki pitagorejskie
a²+b²=c²
spełniająa=r(m²-n²), b=2rmn, c=r(m²+n²)
niektóre liczby całkowiter,m,n
. Kiedyr=1
im,n
są chronione prawem autorskim, przy czym dokładnie jeden jest podzielny przez 2, toa,b,c
jest prymitywny potrójny, gdziea,b,c
wszystkie są chronione parami.Mając to na uwadze, biorąc pod uwagę niektóre
a
, używam algorytmu brutalnej siły, aby obliczyć najmniejszyn
taki,a²-n²
czyli kwadratm²
. Zatemc
jest równyn²+m²
.źródło
n
takiego, którya+n²
jest kwadratem.Python 3, 178 bajtów
Jest to w zasadzie algorytm brutalnej siły, a zatem jest bardzo wolny. Dane wyjściowe wymagają ilości terminów.
Nie jestem w 100% pewien co do poprawności tego algorytmu, program sprawdza drugą nogę do pierwszej nogi do kwadratu, co moim zdaniem jest wystarczające, ale nie zrobiłem matematyki.
Wypróbuj na repl.it! (Nieaktualne) (Nie próbuj tego przy liczbach większych niż 10, będzie to bardzo powolne)
źródło
math.gcd
. Użyj takżep+=[...]
zamiastp.append(...)
. I<2
zamiast==1
. Iif
wszystko może być na jednej linii.MATL , 27 bajtów
To tworzy pierwsze warunki sekwencji. Dane wejściowe są oparte na 0.
Kod jest bardzo nieefektywny. Limit czasu kompilatora online dla danych wejściowych większych niż
5
. Wejście6
trwało półtorej minuty offline (i dało prawidłowy90733
jako szósty termin).Wypróbuj online!
źródło
Rakieta 106 bajtów
Nie golfowany:
Testowanie:
Wyjście wersji golfowej:
Wyjście wersji bez golfa:
(Błąd po tym na moim komputerze)
źródło
Wolfram Language (Mathematica) , 74 bajty
Wypróbuj online!
Wolfram Language (Mathematica) , 74 bajty
Wypróbuj online!
źródło
PHP, 139 bajtów
Powyższy kod ulega awarii po 28455997 w systemach 32-bitowych. Jeśli potrzebne są wyższe liczby, staje się 156 bajtów:
źródło
Java 8, 133 bajtów
-25 bajtów dzięki milom milom Używając n * n zamiast Math.pow (n, 2)
-24 bajty dzięki mile Używanie pętli zamiast zamiast, zmiana typu danych, eliminacja () z powodu kolejności operacji
Wykorzystuje fakt, że
dla dowolnej pary liczb całkowitych m> n> 0. Dlatego C jest równe A plus 2 (N) 2 . Funkcja powyżej znajduje najmniejszą wartość N, która spełnia tę relację, jednocześnie czyniąc drugi element pitagorejskiego potrójnym liczbą całkowitą i większą niż pierwszy element. Następnie ustawia wartość pierwszego elementu na trzeci element i powtarza się ze zaktualizowanym pierwszym elementem.
Nie golfowany:
Ideone to!
* Ideone nie drukuje ostatniego wymaganego elementu ze względu na ograniczenia czasowe, jak jednak można zobaczyć poprzez logikę programu i wersji bez golfa (która drukuje 28455997 jako trzeci element poprzedniej potrójnej pitagorejskiej zamiast pierwszego elementu następny), wartości są drukowane z wyższym limitem czasowym.
źródło
n*n
zamiastMath.pow(n,2)
?for
pętli, aby sprowadzić go do 133 bajtów()->{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;}};
Python 3.5, 97 bajtów
Niepoprawny wynik po
28455997
ze względu na ograniczenia typu danych zmiennoprzecinkowych.sqrt
Funkcja nie jest wystarczająco dobre, ale jeśli zwiększona precyzja została magicznie, że to działa.Całkiem prosty do zrozumienia. Zwiększenie
c
o dwa zamiast jednego powoduje skrócenie czasu wykonywania o połowę, a mimo to należy sprawdzać tylko liczby nieparzyste, ponieważ elementy są zawsze nieparzyste.Wypróbuj online
Programu nie można uruchomić w Ideone, ponieważ Ideone używa Python 3.4
Aby dane wyjściowe pozostały dłużej dokładne, musiałbym użyć
decimal
:Wypróbuj online
Aby zachować dokładność w nieskończoność, mogłem zrobić coś tak okropnego (zwiększenie precyzji wymaganej przy każdej iteracji :
źródło
J ,
5447 bajtówTIO
chciwy podział czynników głównych na czynniki chroniące prawa autorskie
stare 54 bajty TIOźródło
Pari / GP , 71 bajtów
Wypróbuj online!
źródło
APL (NARS), 169 znaków, 338 bajtów
testuj ok do 14 jako argument q:
poniżej znajdują się wszystkie dzielniki jego argumentu ...
źródło
JavaScript (Node.js) , 101 bajtów
Wypróbuj online!
Sugestie dotyczące gry w golfa są mile widziane
źródło