Zadanie
Biorąc pod uwagę liczby całkowite x
i y
które są co najmniej obydwie 2
, znajdź najmniejszą liczbę dodatnią, przez którą y
-tą potęgę można podzielić x
.
Przykład
Biorąc pod uwagę x=96
i y=2
, wynik powinien być, 24
ponieważ 24
jest najmniej pozytywny, n
satysfakcjonujący n^2 is divisible by 96
.
Przypadki testowe
x y output
26 2 26
96 2 24
32 3 4
64 9 2
27 3 3
Punktacja
To jest golf golfowy . Rozwiązanie o najniższej liczbie bajtów wygrywa.
Bibliografia
y=2
: OEIS A019554y=3
: OEIS A019555y=4
: OEIS A053166y=5
: OEIS A015052y=6
: OEIS A015054
X
zawsze być większaY
?X
jest mniejszyY
, i może skrócić długość niektórych odpowiedzi (przynajmniej moich), jeśliX
jest zawsze większa niżY
. Wolałbym, żeby toX
było większe lub mniejsze, ale wtedy jeden test dla tego drugiego byłby świetny.Odpowiedzi:
Brachylog ,
1917161512 bajtów2 bajty zapisane dzięki @LeakyNun.
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 6 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
R*%⁸i0
ma również 6 bajtów.JavaScript (ES7), 32 bajty
źródło
f
. Myślę, że musisz przypisać tę funkcjęf
.Galaretka , 6 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
Python 3,
604339 bajtówDzięki @LeakyNun i @ Sp3000 za pomoc
Funkcja, która pobiera dane wejściowe za pomocą argumentu i zwraca dane wyjściowe.
Jak to działa
Funkcja wykorzystuje rekurencję do wielokrotnego sprawdzania liczb całkowitych
i
, zaczynając odi=1
, aż doi**y%x<1
znalezienia tutaj spełniającego wymagany warunek . Uzyskuje się to logicznie biorącor
pod uwagę warunek i wynik wyrażenia dlai+1
przyrostu, co tutaj jest-~f(x,y,i+1)
. Wyrażenie to stale ocenia,False
aż doj
znalezienia satysfakcjonującej wartości , w którym to momencie dokonuje ocenyTrue
i rekursja kończy się. Ponieważ są one odpowiednio równoważne0
i1
w Pythonie, a funkcja była wielokrotnie dodawana1
przez część inkrementującą, funkcja zwraca(j-1)*False + True + (j-1)*1 = (j-1)*0 + 1 + (j-1)*1 = 1 + j-1 = j
, zgodnie z wymaganiami.Wypróbuj na Ideone
źródło
def f(x,y,i=1):¶ while i**y%x:i+=1¶ print(i)
f=lambda x,y,z=1:z**y%x<1or-~f(x,y,z+1)
True
zamiastz
?-~
częścią, ale tak,True
x
Haskell, 31 bajtów
Przykład użycia:
96#2
->24
.Bezpośrednia implementacja: wypróbuj wszystkie liczby całkowite
n
, zachowaj te, które spełniają warunek, i wybierz pierwszą.źródło
x#y=until(\n->mod(n^y)x<1)(+1)0
05AB1E (10 bajtów)
Wypróbuj online
>
Odczytuje pierwszy argument, inkrementuje go i wypycha na stosG
wyskakuje z stosu (a
) i uruchamia pętlę, która zawiera resztę programu, w którymN
przyjmuje wartość1, 2, ... a - 1
.N²m
wypychaN
i drugi wpis z historii wprowadzania, następnie wyskakuje z nich oba i wypycha pierwszy do potęgi drugiego.¹
wypycha pierwszy wpis z historii wprowadzania na stos.Ö
wyświetla poprzednie dwa wpisy stosu, a następnie przesuwaa % b == 0
stos.i
wyskakuje ze stosu. Jeśli true, wykonuje resztę programu; w przeciwnym razie pętla będzie kontynuowana.N
naciskaN
na stos.q
kończy program.Po zakończeniu programu drukowana jest górna wartość stosu.
źródło
MATL , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
find
?f
ale to znajduje wszystkie niezerowe indeksy.~f1)
Musiałoby to być : negacja, znajdź, zdobądź pierwszy wpisFaktycznie ,
1211 bajtówWielkie podziękowania dla Dziurawej Zakonnicy za wiele sugestii. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Oryginalne podejście 12-bajtowe. Wypróbuj online!
Kolejne 12-bajtowe podejście. Wypróbuj online!
Podejście 13-bajtowe. Wypróbuj online!
Ungolfing:
Pierwszy algorytm
Oryginalny algorytm
Trzeci algorytm
Czwarty algorytm
źródło
;)
R,
61 bajtów,39 bajtów,37 bajtów, 34 bajtówNadal jestem nowicjuszem w programowaniu R i okazuje się, że jest to moja pierwsza funkcja, którą tworzę w R ( Tak! ), Więc wierzę, że jest jeszcze miejsce na ulepszenia.
Test online można przeprowadzić tutaj: RStudio na rollApp .
Ważny postęp:
which.max
działa, ponieważ zwraca najwyższą wartość w wektorze, a jeśli jest wiele, zwróci pierwszą. W tym przypadku mamy wektor wielu FAŁSZ (które są 0) i kilka PRAWDZIWYCH (które są 1), więc zwróci pierwszą PRAWDĘ.Kolejny postęp:
Wreszcie, pokonuje odpowiedź za pomocą Pythona o dwa bajty. :)
Kolejny postęp: (znowu!)
Ogromne podziękowania dla Axeman i user5957401 za pomoc.
źródło
which.min
, możesz się go pozbyć==0
. Moduł zwróci liczbę, która nie będzie mniejsza niż 0.function(x,y)which(!(1:x)^y%%x)[1]
.dc
2322 bajtyPodziękowania dla Deliotha za jego wskazówkę dotyczącą metod wprowadzania danych, oszczędzania bajtu
Używa operatora głębokości stosu
z
do zwiększania przypadku testowego bezpośrednio na stosie, a operatora modularnego potęgowania|
do, cóż, potęgowania modułowego. Powtarzaj test, aż reszta nie będzie większa niż zero.źródło
?
na początku, ponieważ standardowym sposobem wywoływania niektórych rzeczy jest> echo "x y [program]"|dc
, gdziex
iy
są takie same jak Pytanie, a y zostaną upuszczone na stos jak zwykle.-e
opcji, ale od tej pory będę z niej korzystać."
nie jest zaimplementowanedc
, podczas gdy nie używanie cudzysłowów oczywiście powoduje błędy powłoki. Czy można coś z tym zrobić? Wiem, żestderr
można to zignorować, ale wciąż mi to przeszkadza.05AB1E , 8 bajtów
Wyjaśnienie
Wypróbuj online
źródło
Perl 6 ,
2625 bajtówWyjaśnienie:
źródło
Mathematica, 36 bajtów
źródło
Dyalog APL , 11 bajtów
Tłumaczenie tego .
0⍳⍨
znajdź pierwsze zero w⊣|
resztach podziału, gdy x dzieli(⍳⊣)*
liczby całkowite od jednego do x , podniesione do potęgi⊢
yWypróbuj APL online!
źródło
PowerShell v2 +, 48 bajtów
Pobiera dane wejściowe
$x
i$y
. Konstruuje zakres od1
do$x
, a następnie używaWhere-Object
do filtrowania tych liczb. Filtr pobiera ciąg znaków"$_*"
(tj. Bieżącą liczbę z gwiazdką) i używa mnożenia ciągu znaków, aby połączyć te$y
czasy, a następnie haczyki na1
końcu na końcu, a następnie potokuje toiex
(skrótInvoke-Expression
i podobne doeval
). Zastępuje to[math]::Pow($_,$y)
, ponieważ PowerShell nie ma operatora potęgowania i jest o dwa bajty krótszy. Jest on podawany do operatora modulo za%
pomocą$x
- więc jeśli jest podzielny, będzie to0
, więc ujmujemy to w parens i bierzmy wartość logiczną!(...)
tego. Tak więc, jeśli jest podzielna, zostanie uwzględniona przez ten filtr, a wszystkie inne liczby zostaną wykluczone.Na koniec zamykamy wynikowe liczby w parens
(...)
i bierzemy[0]
indeks. Ponieważ wprowadzony zakres został posortowany1..$x
, będzie to najmniejszy. Pozostaje to w przygotowaniu, a drukowanie jest niejawne.Przypadki testowe
źródło
PHP,
5533 bajtówźródło
Perl,
2926 bajtówObejmuje +3 dla
-p
(nie +1, ponieważ kod zawiera'
)Uruchom z wejściem na STDIN
power.pl
:źródło
Pyth, 9 bajtów
Program, który pobiera dane z listy formularza
[x, y]
na STDIN i drukuje wynik.Wypróbuj online
Jak to działa
źródło
PHP 59 bajtów
Przepraszam, ale nie mogę tego przetestować z telefonu komórkowego. :)
Grał w golfa
źródło