Ostatnio pojawiło się wiele wyzwań związanych z pierwszorzędnymi / pierwszymi czynnikami, więc pomyślałem, że może być interesujące pójście w drugą stronę.
Dany:
- dodatnia liczba całkowita
n
oraz - niepusta lista dodatnich liczb całkowitych
f
napisać pełny program lub funkcję, aby znaleźć najmniejszą liczbę całkowitą i
takie, że i >= n
i i
jest produktem, uprawnień nieujemnych liczb całkowitych z elementów f
.
Przykłady:
Załóżmy
n = 11, f = [2, 3, 5]
.Pierwsze kilka produktów to:
1 = 2^0 * 3^0 * 5^0 2 = 2^1 * 3^0 * 5^0 3 = 2^0 * 3^1 * 5^0 5 = 2^0 * 3^0 * 5^1 4 = 2^2 * 3^0 * 5^0 6 = 2^1 * 3^1 * 5^0 10 = 2^1 * 3^0 * 5^1 9 = 2^0 * 3^2 * 5^0 15 = 2^0 * 3^1 * 5^1 25 = 2^0 * 3^0 * 5^2 8 = 2^3 * 3^0 * 5^0 12 = 2^2 * 3^1 * 5^0 => smallest greater than (or equal to) 11, so we output it. 20 = 2^2 * 3^0 * 5^1 18 = 2^1 * 3^2 * 5^0 30 = 2^1 * 3^1 * 5^1 50 = 2^1 * 3^0 * 5^2 27 = 2^0 * 3^3 * 5^0 45 = 2^0 * 3^2 * 5^1 75 = 2^0 * 3^1 * 5^2 125 = 2^0 * 3^0 * 5^3
Załóżmy
n=14, f=[9, 10, 7]
.Ponownie kilka pierwszych produktów:
1 = 7^0 * 9^0 * 10^0 7 = 7^1 * 9^0 * 10^0 9 = 7^0 * 9^1 * 10^0 10 = 7^0 * 9^0 * 10^1 49 = 7^2 * 9^0 * 10^0 => smallest greater than (or equal to) 14, so we output it. 63 = 7^1 * 9^1 * 10^0 70 = 7^1 * 9^0 * 10^1 81 = 7^0 * 9^2 * 10^0 90 = 7^0 * 9^1 * 10^1 100 = 7^0 * 9^0 * 10^2
Przypadki testowe:
n, f -> output
10, [2, 3, 5] -> 10
17, [3, 7] -> 21
61, [3,5,2,7] -> 63
23, [2] -> 32
23, [3] -> 27
23, [2, 3] -> 24
31, [3] -> 81
93, [2,2,3] -> 96
91, [2,4,6] -> 96
1, [2,3,5,7,11,13,17,19] -> 1
151, [20,9,11] -> 180
11616, [23,32] -> 12167
11616, [23,32,2,3] -> 11664 = 2^4 * 3^6
5050, [3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210] -> 5103 = 3^6 * 7
12532159, [57, 34, 12, 21] -> 14183424 = 12^5 * 57
Zasady
- Możesz założyć, że
f
będzie zawierać co najmniej jeden element i że wszystkie elementyf
będą większe niż 1. - Możesz opcjonalnie założyć, że
f
jest sortowany w porządku malejącym / rosnącym, jeśli chcesz (ale proszę określić). - Opcjonalnie możesz wziąć liczbę elementów,
f
jeśli chcesz. - Wyjście jako ciąg jest dozwolone.
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach w każdym języku!
- Obowiązują domyślne reguły we / wy, a standardowe luki są zabronione.
- Wyjaśnienia są zachęcane.
źródło
∞
zapisuje3
bajty nad-Log@0 (doesn't work on TIO, but works fine on desktop Mathematica). Also,
Tr [1 ^ {##}] `jest bajtem krótszym niżLength@{##}
.#2
jest nawet krótszy niżTr[1^{##}]
. :)Quiet
swój główny kod. Ta odpowiedź generuje zbyt wiele błędnych komunikatów. Przynajmniej zapytaj OP, czy wszystko z nim w porządku∞
Problemem wydaje się być błąd. Spróbuję to naprawić.Python 2 ,
918884 bajtówWypróbuj online!
Funkcja
f
sprawdza rekurencyjnie, czyn
jest iloczynem mocy elementów wl
,g
jest tylko opakowaniem do kontrolowania iteracjiźródło
Python, 55 bajtów
Wypróbuj online!
Bezwstydnie skopiowałem stopkę Rod do testowania
źródło
Galaretka , 13 bajtów
Dynamiczny link prowadzący do listy
f
po lewej stronie i liczby,n
po prawej stronie, która daje liczbę.Wypróbuj online! Golfly nieefektywne - przekroczy limit czasu dla danych wejściowych z wyższym
n
i / lub dłuższejf
.W jaki sposób?
Wiemy, że moce indywidualnych (ściśle pozytywnych) czynników nigdy nie będą musiały przekraczać
n-1
... więc zbadajmy wszystkie możliwe sposoby!
źródło
Siatkówka , 76 bajtów
Wypróbuj online! Link wyklucza najwolniejsze przypadki testowe, ale wciąż jest trochę powolny, więc staraj się nie hamować serwera @ Dennis.
źródło
Pyth - 10 bajtów
Bardzo szybko kończy się pamięć.
Wypróbuj online tutaj .
Rozsądna odpowiedź dla 16 bajtów:
fsm.A}RQ*Md./PTE
źródło
Mathematica, 85 bajtów
Wejście
źródło
{d,s}Min@Select[Flatten[1##&@@(s^#)&/@0~Range~9~Tuples~Tr[1^s]],#>=d&]
U+F4A1
, długie imię\[Function]
.0~Range~9
wydaje się bardzo konserwatywne. Czyg[{2,3,5},1001]
naprawdę powinien pominąć1024
i wrócić1080
? To nie jest szczególnie duży wkład.Japt , 10 bajtów
Przetestuj online!
Nie działa w ostatnim przypadku testowym z powodu limitu iteracji zaprojektowanego, aby uniemożliwić działanie interpretera na zawsze (nie pomogło to tutaj, ponieważ zamroził moją przeglądarkę na godzinę ...)
Wyjaśnienie
źródło
Galaretka , 9 bajtów
Zastosowanie środowiska wykonawczego O (2 n • length (f) ) i pamięci powoduje, że jest to rozwiązanie teoretyczne.
Wypróbuj online!
źródło
Haskell , 46 bajtów
To jest część doskonałej odpowiedzi KSab na Python . Podziękowania dla Laikoni za ich pomoc w debugowaniu i grze w golfa w odpowiedzi na czacie PPCG Haskell, Of Monads and Men . Zapraszamy do gry w golfa! Wypróbuj online!
źródło
Mathematica, 73 bajty
Zasadniczo port odpowiedzi Pytona na Rod . Definiuje dwa operatory binarne i . zwraca if jest iloczynem elementów
±
·
n±f
True
n
f
iFalse
innych .n·f
daje najmniejszą liczbę całkowitąi
. Jeśli ktoś wymyśli sposób na wyeliminowanie testu podzielności, mógłbym zaoszczędzić 10 bajtów, stosując kodowanie ISO 8859-1.Wyjaśnienie
źródło
R , 52 bajty
Wypróbuj online!
Minęły 3 tygodnie, więc pomyślałem, że w końcu opublikuję własne rozwiązanie. To podejście z użyciem brutalnej siły.
Istnieje jednak wbudowane:
R , 5 bajtów
Wypróbuj online!
Z dokumentów R:
Niektóre testy ujawniły jednak błąd w implementacji, jak pokazuje powyższy link TIO.
nextn(91,c(2,6))
powinien zwrócić 96, ale zamiast tego zwraca 128. Dzieje się tak oczywiście tylko wtedy, gdyfactors
nie wszystkie są względnie pierwsze względem siebie. Rzeczywiście, kod C leżący u jego podstaw ujawnia, żenextn
zachłannie próbuje podzielić każdyfactor
z nich, dopóki nie1
zostanie osiągnięty:Można to rozwiązać, przyjmując dane wejściowe w malejącej kolejności.
źródło
JavaScript (ES6),
5350 bajtówZaoszczędź 3 bajty dzięki @DanielIndie
Pobiera dane wejściowe w składni curry
(n)(a)
.Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
źródło