Zadanie
Napisz program lub funkcję, która po przekazaniu danych numerycznych x
drukuje lub zwraca liczby pierwsze poniżej pierwiastka kwadratowego z x
1 , które nie są czynnikami x
.
Przykłady
Niech f(x)
będzie funkcją o nazwie:
>>> f(4)
[]
>>> f(5)
[2]
>>> f(20)
[3]
>>> f(60)
[7]
>>> f(100)
[3, 7]
>>> f(10000)
[3, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Zasady bonusów
- Możesz użyć dowolnego wbudowanego języka.
- Twój program musi obsługiwać
x
wejście tak wysokie, jak górna granica zdefiniowana przez Twój język.
1 Używanie pierwiastka kwadratowego, ponieważ tylko liczby pierwsze poniżej pierwiastka kwadratowego mogą być faktycznie uwzględnione w czynnikach x
. Bez tego ograniczenia większe liczby miałyby dużo nadmiaru wydrukowanych liczb.
x
” nie jest prawdą: liczba może mieć jeden czynnik pierwszy większy niż pierwiastek kwadratowy. Rzeczywiście, pierwsze dwa przykłady (5 i 20) mają tę właściwość, podobnie jak wszystkie liczby pierwsze, dwa razy wszystkie liczby nieparzyste, ...Odpowiedzi:
Galaretka, 6 bajtów na stronie kodowej Jelly
Wypróbuj online!
Wyjaśnienie:
źródło
MATL ,
109 bajtówWypróbuj online!
Wyjaśnienie
źródło
Python 3 ,
6762 bajtówWypróbuj online!
źródło
MATLAB,
5754 bajtówCałkiem proste, pobiera tablicę liczb pierwszych do sqrt (p), a następnie usuwa te, które są również czynnikami p. Domyślnie drukuje wyjście ostatniego wiersza, ponieważ średnik jest pominięty.
źródło
Pyth, 10 bajtów
Program, który pobiera liczbę i drukuje listę.
Zestaw testowy
Jak to działa
źródło
05AB1E , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
PHP, 76 bajtów
używa mojego rozwiązania is_prime w golfa za $ n> 1
pobiera dane wejściowe z argumentu wiersza poleceń. Uruchom z
-r
.źródło
Mathematica, 46 bajtów
Funkcja anonimowa. Pobiera liczbę jako dane wejściowe i zwraca listę liczb jako dane wyjściowe. Znak Unicode to U + 2223 DIVIDES dla
\[Divides]
.źródło
Rubinowy, 55 bajtów
Raczej leniwa odpowiedź przy użyciu wbudowanego głównego modułu wyliczającego.
źródło
Cud , 14 bajtów
Stosowanie:
Pobiera elementy z nieskończonej listy liczb pierwszych, gdy element jest mniejszy niż pierwiastek kwadratowy argumentu.
źródło
Pyke, 10 bajtów
Wypróbuj tutaj!
źródło
PowerShell v2 +, 71 bajtów
Iteracyjne rozwiązanie. Pobiera dane wejściowe
$n
i tworzy zakres od1
doSqrt($n)
(zwróć uwagę, że operator zakresu domyślnie rzuci górny koniec na[int]
domyślnie wykonujący Zaokrąglanie bankiera). Następnie używa|?{...}
(Where-Object
operator, który działa jak filtr), aby wyciągnąć te liczby, które$n%$_
są niezerowe (tj. Każda pozostała część modulo oznacza, że nie jest to czynnik, a każda niezerowa jest prawdziwa)-and
pierwsza próba zwykle regex jest$true
. Pozostają one w przygotowaniu, a dane wyjściowe są niejawne.Przykłady
(z dodatkowym formatowaniem, aby poprawić wyniki)
Uwaga: Nie powiedzie się to we wcześniejszych wersjach, jeśli dane wejściowe są większe niż około
2500000000
, ponieważ..
operator zakresu może obsłużyć maksymalnie 50 000 elementów. Ponieważ jednak jest ona większa niż[int]
maksymalna wartość domyślnego typu danych2147483647
, przypuszczam, że jest OK. Na moim komputerze PSv4 Win8.1 mogę jednak przejść wyżej, ale nie mogę znaleźć dokumentacji wyjaśniającej różnicę.źródło
JavaScript (ES6),
7976 bajtówNa podstawie mojej funkcji testu pierwotności rekurencyjnej . Wydaje mi się, że powinno być kilka sposobów, aby to uprościć, ale nie wiem, jak ...
Testowy fragment kodu
źródło
Oktawa, 44 bajty
Ta odpowiedź jest zainspirowana odpowiedzią MattWH MATLAB , ale grałem w nią w golfa, używając funkcji specyficznych dla Octave.
Jest to anonimowa funkcja, która pobiera dane wejściowe
x
. Oktawa ma wbudowane przypisywanie i indeksowanie zmiennych, co pozwalay
najpierw zostać utworzone w funkcji (niemożliwe w MATLAB), a następnie użyte jako część maski logicznej utworzonej przezismember
(ponownie, nie jest to możliwe w MATLAB).źródło
Perl 6 , 37 bajtów
Rozszerzony:
źródło
TSQL, 130 bajtów
Wykona się to tylko raz, następnie musisz upuścić tabelę tymczasową, aby wykonać ponownie w tym samym edytorze
Stworzyłem wersję do przetestowania, jest ona nieco dłuższa, ponieważ uprawnienia online do tworzenia tabel są niedostępne. Z tego samego powodu nie potrzebuje on tabeli zrzutu.
Wypróbuj online
źródło
R
58 58bajtówZapętla wszystkie wartości od 2 do
sqrt(x)
i sprawdza, czy są one pierwszorzędne wnumbers
pakiecie.x%%i
oblicza,x mod i
która jest0 -> False
jeślii
jest dzielnikiemx
i>0 -> True
jeślii
nie jest.+5 bajtów, ponieważ
numbers::Primes(n)
funkcja nie pozwala na ułamki dziesiętne, podczas gdy2:sqrt(x)
działa, dodano doif
instrukcji sprawdzanie liczby pierwszej.źródło
Haskell,
5554 bajtówPrzeważnie proste zestawienia zagnieżdżonych list. GCD wykonuje dwie role, sprawdzając, czy liczby poniżej y są współczynnikami y, a także sprawdzając, czy y jest współczynnikiem x.
Rozłożył się trochę:
źródło
gcd(z*x)y>1
.Retina ,
6966 bajtówDrukuje liczby pierwsze na osobnych liniach, od największej do najmniejszej.
Wypróbuj online!(Zajmuje około 10 sekund z powodu dwóch ostatnich przypadków testowych. Nagłówek i stopka włączają pakiet testowy oddzielny od linii i konwertują dane wyjściowe do separacji przecinków dla zapewnienia czytelności).
Wyjaśnienie
Przekształć dane wejściowe w jednoargumentowe.
To poprzedza pierwiastek kwadratowy z danych wejściowych, oddzielony przez
:
. Pierwiastek kwadratowy jest obliczany na podstawie faktu, że kwadratn
jest również sumą pierwszychn
nieparzystych liczb całkowitych. Możemy dopasować kolejne nieparzyste liczby całkowite z referencją do przodu(11\1|^1)
. W procesie grupa zostanie użyta dokładnien
razy, gdzien
jest największą liczbą, której kwadrat pasuje do wejścia.Wstawiamy jednoargumentową reprezentację tego numeru
$#1$*1
, następnie dwukropek i sam mecz.To pasuje do wszystkich brakujących liczb pierwszych pasujących do pierwiastka kwadratowego. Wykrywanie liczb pierwszych opiera się na standardowym wyrażeniu regularnym sprawdzania liczb pierwszych , a następnie upewniamy się, że liczba pierwsza, którą właśnie przechwyciliśmy, nie dzieli danych wejściowych z drugim spojrzeniem w przód. Korzystając z
&
opcji, otrzymujemy nakładające się mecze, aby zapewnić, że otrzymamy wszystkie liczby pierwsze.Konwertuje każdą linię (tj. Każdą brakującą liczbę pierwszą) z powrotem na dziesiętną, dopasowując liczbę
1
s. Jedynym problemem jest to, że wstawia zero, jeśli w ogóle nie znaleziono brakujących liczb pierwszych.Więc ten etap usuwa to zero, jeśli zostało dodane.
źródło