Wyzwanie
Twoim zadaniem jest napisanie programu lub funkcji, która przy dodatniej liczbie całkowitej N znajdzie wszystkie dodatnie liczby całkowite mniejsze lub równe N, które można wyrazić jako moc doskonałą na więcej niż jeden sposób.
Definicja
Doskonałym moc jest określona jako liczba i znaleziona przez m ^ k , gdzie:
- m i i są liczbami całkowitymi dodatnimi
- m! = k
Przypadki testowe
wejście -> wyjście 1000 -> 16, 64, 81, 256, 512, 625, 729 56 -> 16 999 -> 16, 64, 81, 256, 512, 625, 729 81 -> 16, 64, 81 1500 -> 16, 64, 81, 256, 512, 625, 729, 1024, 1296
Podaj także czytelną, skomentowaną wersję.
code-golf
math
number
number-theory
fR0DDY
źródło
źródło
Odpowiedzi:
Mathematica: 103 znaki
Spacje można usunąć
Stosowanie:
źródło
Galaretka , 11 znaczących bajtów, wyzwanie po datach językowych
Wypróbuj online!
Oto zupełnie inne rozwiązanie. To ciekawa hybryda wydajnego i nieefektywnego, wykorzystująca wydajny algorytm rdzeniowy w bardzo nieefektywnym opakowaniu (do tego stopnia, że nie radzi sobie z bardzo dużymi liczbami). Jak poprzednio, wszystkie białe znaki są bez znaczenia.
Oto jak to działa.
Ḋ
(która pojawia się kilka razy) to lista liczb od 2 do wejścia włącznie:Podstawowa obserwacja tutaj jest taka, że liczba jest doskonałą mocą na wiele sposobów, tylko jeśli jest to doskonała moc z wykładnikiem wykładniczym (to nie jest 1). Generujemy listę tych, w których podstawa wynosi od 2 do wejścia, a wykładnik jest liczbą złożoną od 4 do wejścia; jest to bardzo powolne, ponieważ generuje kilka naprawdę dużych liczb, z których wszystkie są odpowiedzią na pytanie. Następnie zachowujemy tylko te odpowiedzi, które są w zasięgu.
Łatwo byłoby zmienić to na wysoce wydajną odpowiedź, sprawdzając, jaka była maksymalna moc w zasięgu i nie powtarzając dalej, ale byłoby to o wiele więcej bajtów, a to jest golfowy kod.
źródło
Perl: 68 znaków
Pobiera maksimum (1000)
$N
i zwraca odpowiedź@a
.Do całego programu potrzebuję kolejnych 18 znaków:
źródło
sort
wcześniejgrep
. Nawiasem mówiąc, nigdy wcześniej nie widziałem kodu. Dzięki.Rubin - 101 znaków (bez białych znaków)
Działa przez
1 <= limit <= 100,000,000
5 sekund.Test
źródło
Galaretka , 13 znaczących znaków, wyzwanie postdatate języka
Wypróbuj online!
Wszystkie białe znaki tutaj są nieznaczne. Użyłem go, aby pokazać strukturę mojej odpowiedzi, jak zadaje pytanie.
Oto jak to działa:
Na przykład, testując n = 256, sprawdzamy, ile razy każda z liczb od 2 do 256 dzieli się na 256. Jedyne liczby, które dzielą więcej niż jeden raz, to 2 (który dzieli 8 razy), 4 (który dzieli 4 razy), 8 (który dzieli dwa razy) i 16 (który dzieli dwa razy). Kiedy więc podnosimy liczbę podziałów do ustalonych tam mocy, otrzymujemy:
Daje to oryginalną wartość 256, liczbę razy równą sposobowi, że 256 jest mocą doskonałą, plus jeden (ostatni element daje 256, ponieważ 256 = 256¹). Więc jeśli widzimy 256 więcej niż dwa razy w tablicy (i robimy w tym przypadku; 8² to 64, ale wszystkie inne „interesujące” elementy dają 256), to musi być idealna moc.
źródło