Liczba wtórna jest dodatnią liczbą całkowitą, której czynniki pierwsze (bez wielokrotności) są mniejsze lub równe pierwiastkowi kwadratowemu. 4
jest liczbą drugorzędną, ponieważ jej jedynym czynnikiem podstawowym jest 2
równa pierwiastek kwadratowy. Nie 15
jest to jednak liczba wtórna, ponieważ ma ona 5
jako pierwszy czynnik większy niż pierwiastek kwadratowy ( ~ 3.9
). Ponieważ wszystkie liczby pierwsze mają się jako czynniki pierwsze, żadna liczba pierwsza nie jest liczbą wtórną. Pierwsze kilka liczb wtórnych jest następujące:
1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Liczba trzeciorzędowa jest zdefiniowana podobnie, z tym wyjątkiem, że wszystkie czynniki pierwsze muszą być mniejsze lub równe pierwiastkowi sześcianu. Pierwsze kilka liczb trzeciorzędnych są następujące:
1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
Ogólnie rzecz biorąc, liczba n-ary to liczba, której czynniki pierwsze są mniejsze lub równe n-temu pierwiastkowi. Zatem dodatnia liczba całkowita jest liczbą n
-arną iff każdy z jej czynników pierwszych spełnia . Tak więc wszystkie liczby pierwotne są dodatnimi liczbami całkowitymi (wszystkie czynniki pierwsze mniejsze lub równe sobie), liczby kwadratowe mają wszystkie swoje czynniki pierwsze mniejsze lub równe czwartemu pierwiastkowi i tak dalej.
Wyzwanie
Biorąc pod uwagę całkowite k
i n
jak wejść, wyjście k
th n
liczba -ary. k
może być zerowy lub indeksowany jednokrotnie (twój wybór) i n
zawsze będzie dodatni.
Przykłady
Oto pierwszych 20 elementów w każdej sekwencji do 10-arytowych liczb:
Primary: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Secondary: 1, 4, 8, 9, 12, 16, 18, 24, 25, 27, 30, 32, 36, 40, 45, 48, 49, 50, 54, 56
Tertiary: 1, 8, 16, 27, 32, 36, 48, 54, 64, 72, 81, 96, 108, 125, 128, 135, 144, 150, 160, 162
Quarternary: 1, 16, 32, 64, 81, 96, 108, 128, 144, 162, 192, 216, 243, 256, 288, 324, 384, 432, 486, 512
5-ary: 1, 32, 64, 128, 243, 256, 288, 324, 384, 432, 486, 512, 576, 648, 729, 768, 864, 972, 1024, 1152
6-ary: 1, 64, 128, 256, 512, 729, 768, 864, 972, 1024, 1152, 1296, 1458, 1536, 1728, 1944, 2048, 2187, 2304, 2592
7-ary: 1, 128, 256, 512, 1024, 2048, 2187, 2304, 2592, 2916, 3072, 3456, 3888, 4096, 4374, 4608, 5184, 5832, 6144, 6561
8-ary: 1, 256, 512, 1024, 2048, 4096, 6561, 6912, 7776, 8192, 8748, 9216, 10368, 11664, 12288, 13122, 13824, 15552, 16384, 17496
9-ary: 1, 512, 1024, 2048, 4096, 8192, 16384, 19683, 20736, 23328, 24576, 26244, 27648, 31104, 32768, 34992, 36864, 39366, 41472, 46656
10-ary: 1, 1024, 2048, 4096, 8192, 16384, 32768, 59049, 62208, 65536, 69984, 73728, 78732, 82944, 93312, 98304, 104976, 110592, 118098, 124416
ÆfṪ*³<‘
ponieważ wiemy, że jeśli jakikolwiek czynnik fałszuje tenẠ
z prawej.Brachylog , 21 bajtów
Wypróbuj online!
Ta odpowiedź ma jeden indeks.
Wyjaśnienie
źródło
JavaScript (ES7),
9590 bajtówRacjonalnie szybki, ale niestety ograniczony maksymalną liczbą rekurencji.
Jak to działa
Zamiast faktoryzować liczbę całkowitą i i sprawdzić, czy wszystkie jej czynniki pierwsze są mniejsze lub równe x = floor (i 1 / n ) , staramy się bezpośrednio zweryfikować to drugie założenie. Taki jest cel funkcji wewnętrznej F () :
Sprawdzamy, czy jakaś liczba całkowita d w [2 ... i 1 / n ] dzieli i . Jeśli nie, założenie jest nieważne i zwracamy 1 . Jeśli tak, rekurencyjnie powtarzamy proces na i = i / d aż do niepowodzenia lub początkowa liczba całkowita zostanie w pełni uwzględniona ( i == 1 ), w którym to przypadku zmniejszamy wartość k . Z kolei funkcja zewnętrzna f () jest wywoływana rekurencyjnie, aż do k == 0 .
Uwaga: Z powodu błędów zaokrąglania zmiennoprzecinkowego, takich jak
125**(1/3) == 4.9999…
faktyczna obliczona wartość dla x to floor ((i + 1) 1 / n ) .Próbny
(Tutaj z 97-bajtową wersją ES6 dla lepszej kompatybilności.)
Pokaż fragment kodu
źródło
JavaScript (ES7),
9379 bajtówNie mogłem zrozumieć odpowiedzi Arnaulda, więc napisałem własną i wygodnie przyszła o dwa bajty krócej. Edycja: Zapisano 14 bajtów przy pomocy @ETHproductions. Nie golfowany:
źródło
++i**(1/n)
a nie zi**(1/n)
powodu błędów zaokrąglania zmiennoprzecinkowego, takich jak125**(1/3) == 4.999...
. (Sposób, w jaki jest napisany, myślę, że nie wpływa to na twój kod.)m
aby zgolić kolejne dwa bajty.Haskell, 86 bajtów
Wyjaśnienie:
(
%%%%
oznacza kod z powyższej linii)źródło
filter
z lambda rzadko się opłaca, lista jest zazwyczaj krótsza:m#n=(0:1:[k|k<-[2..],last[n|n<-[2..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k])!!m
.0:
, ponieważ indeksowanie może być oparte na 0.m#n=[k|k<-[1..],last[n|n<-[1..k],all((>0).rem n)[2..n-1],k
remn<1]^n<=k]!!m
Pyth, 13 bajtów
Wypróbuj online.
Działa tak samo jak rozwiązanie Jelly.
źródło
Perl 6, 88 bajtów
Mój przypadkowy wgląd jest taki, że nie trzeba patrzeć na każdy czynnik
n
, tylko na największy, jaki jest funkcją wewnętrznąf
oblicza . Niestety, wysadza stos z większymi wejściami.Wytrzymałość można poprawić, dodając test pierwszeństwa, używając wbudowanej
is-prime
metody Ints, kosztem kilku dodatkowych znaków.źródło
Łuska , 10 bajtów
Wypróbuj online!
Wyjaśnienie
Zajęło mi trochę czasu, aby wymyślić użycie
→
pustej listy zwrotów1
zamiast tego,-Inf
dla▲
których pozostawia1
na liście (w przeciwnym razie to kosztowałoby 2 bajty, aby ją ponownie wstawić):źródło
R, 93 bajty
Zero indeksowane.
Jest to funkcja rekurencyjna, która działa, dopóki nie znajdzie następnej liczby w linii. Używa
numbers
pakietu, aby znaleźć czynniki pierwsze.źródło
MATL, 21 bajtów
Rozwiązanie to wykorzystuje jedną opartą indeksowania i wejścia są
n
ik
, odpowiednio.Wypróbuj online!
Wyjaśnienie
źródło
~
aby zmienić przeznaczenie drugiego wejścia :-)Brachylog v2 , 16 bajtów
Wypróbuj online!
Kredyt do rozwiązania Jelly Dennisa za wprowadzenie mnie myślenie w dobrym kierunku.
Wyjaśnienie
Oto nieco niestosowana wersja, którą łatwiej przeanalizować:
Predykat pomocnika (wiersz 2): dane wejściowe są wykładnikiem n , dane wyjściowe nie są ograniczone:
Główny predykat (wiersz 1): dane wejściowe to lista zawierająca indeks k (oparty na 1) i wykładnik n ; dane wyjściowe są nieograniczone:
źródło
APL (NARS), 53 znaki, 106 bajtów
test:
źródło
Python 2 , 114 bajtów
Wypróbuj online!
Funkcja 1-indeksowana.
źródło
Japt , 14 bajtów
Pobiera
n
jako pierwsze wejście ik
(1-indeksowane) jako drugie.Spróbuj
źródło