Liczby pierwsze w dużej liczbie


11

Biorąc pod uwagę dużą liczbę (w bazie 10), taką jak 1234567891011121314151617, znajdź w niej „podnumery”.
Pierwsza „podnumer” to kolejna sekwencja cyfr (pobrana z wejścia), która reprezentuje liczbę pierwszą (w podstawie 10).

  • Dane wejściowe : liczba (ciąg, plik lub cokolwiek chcesz).
  • Dane wyjściowe : wszystkie główne liczby podrzędne są jakoś oddzielone (na liście, w pliku, ciągi oddzielone przecinkami ...) Jeśli wynik jest pusty, możesz zastosować dowolną konwencję (ciąg zakodowany na stałe, pusty ciąg, bełkot, ale program nie powinien wypadek.
  • Przykład
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. pusty wynik]

To jest golf golfowy. Najkrótszy program wygrywa!
[edytuj]: dodatkowa reguła, program musi zostać wyjaśniony! Nie wszyscy mówią płynnie w galaretce :)


3
Witamy w PPCG!
Luis Felipe De Jesus Munoz


1
nieokreślony. Rób, co chcesz.
Regis Portalez

1
Wskazówka: To za wcześnie, aby przyjąć odpowiedź; może zniechęcać innych do publikowania rozwiązań.
Shaggy

2
@RegisPortalez witamy i miłe wyzwanie! Przekonałem się, że funkcja „akceptuj” nie jest już tak często używana w PPCG, jak w innych witrynach w sieci. Zwykle cenimy ładne odpowiedzi w dowolnym języku.
ngm

Odpowiedzi:


6

05AB1E (starsza wersja) , 3 bajty

Œʒp

Wypróbuj online!

Podciągi wejściowe, które są pierwsze.


Trudno będzie skrócić :)
Regis Portalez

Właściwy język dla tego zadania
Jonathan Allan

5
@mob To zależy od kodowania. W kodowaniu 05AB1E ta odpowiedź ma 3 bajty.
Dennis

2
Zgodnie z tym 34567 = 13 * 2659 jest liczbą pierwszą, wydaje się błędna: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh

2
@frosqh W rzeczywistości jest to błąd funkcji p (pierwsza) w nowej wersji 05AB1E : tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA Został już naprawiony w repozytorium, ale nie został opublikowany na TIO. W międzyczasie zmieniłem odpowiedź na starszą wersję.
Kaldo

6

Perl 6 , 28 bajtów

{grep &is-prime,+«m:ex/.+/}

Wypróbuj online!

Flaga :ex(„wyczerpująca”) do operatora dopasowania mpowoduje, że zwraca on każde możliwe dopasowanie .+(tj. Każdy podciąg jednego lub więcej znaków), nawet te nakładające się. Hiperoperator zamienia tę listę Matchobiektów w liczby, które są następnie filtrowane pod kątem pierwotności grep &is-prime.


Tutaj miałem iść z{+«m:ex/(.+)<?{$0.is-prime}>/}
Brad Gilbert b2gills

@ BradGilbertb2gills Też tego próbowałem! Jestem trochę rozczarowany, że okazało się, że jest dłuższy.
Sean

Dzięki za wyjaśnienie - zawsze pomocne dla Perl 4 dinozaurów takich jak ja!
Toby Speight


5

Python 2 , 66 65 bajtów

P=k=1
n=input()
while~n+k:
 if`k`in`n`>0<P%k:print k
 P*=k*k;k+=1

Wypróbuj online!


Powinien być while k<=nlub, aby kosztować 0 bajtów,while~n+k
Jonathan Allan

@JonathanAllan dziękuję. Na początku myślałem, że sama liczba powinna zostać wykluczona z wyjścia, ale wygląda na to, że tak nie jest.
ovs

@JonathanAllan Czy potrafisz wyjaśnić kod z whilewyciągu? Nie widziałem wcześniej tego typu kodów. Nie widziałem też użycia `` , co robi?
tarit goswami

1
@taritgoswami while stmt:będzie działać tak długo, jak długo stmtma wartość uznawaną przez python za prawdziwą. Jedyną liczbą całkowitą fałsz w Pythonie jest 0. Dlatego kod będzie działał jako ~n+k != 0. ~jest operatorem uzupełniania bitowego i ~njest równoważny z -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Ponieważ zwiększamy ko 1każdą operację, k != n + 1w tym przypadku jest równoważne k <= n.
ovs

1
@taritgoswami I `n`jest taki sam jak repr(n)w Pythonie 2. (nie działa w Pythonie 3).
ovs


3

Galaretka ,  5  4 bajtów

-1 dzięki Kevin Cruijssen ( jest pseudonimem ÆP)

ẆḌẒƇ

Monadyczny link akceptujący listę cyfr *, która daje listę liczb całkowitych pierwszych.

* przechodząc przez „ciąg, plik lub cokolwiek chcesz” - aby przyjąć liczbę całkowitą, poprzedz kod kodem D

Wypróbuj online!

W jaki sposób?

ẆḌẒƇ - Link: list of integers (digits)   e.g. [1,2,3,4]
Ẇ    - non-empty contiguous substrings        [[1],[2],[3],[4],[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]]
 Ḍ   - convert to decimal (vectorises)        [1,2,3,4,12,23,34,123,234,1234]
   Ƈ - filter keep if:
  Ẓ  -   is prime?                            [2,3,23]

ÆPmoże być, jeśli się nie mylę?
Kevin Cruijssen

Ach tak, to jeden z nowych pseudonimów - dzięki!
Jonathan Allan

2

Java 8, 148 147 bajtów

n->{for(int l=n.length(),i=l,j;i-->0;)for(j=l;j>i;){long k=2,x=new Long(n.substring(i,j--));for(;k<x;x=x%k++<1?0:x);if(x>1)System.out.println(x);}}

Wypróbuj online.

Wyjaśnienie:

n->{                     // Method with String parameter and no return-type
  for(int l=n.length(),  //  Length of the input-String
          i=l,j;         //  Temp-integers
      i-->0;)            //  Loop `i` in the range [length, 0)
    for(j=l;j>i;){       //   Inner loop `j` in the range [length, 0)
      for(long k=2,      //    Set `k` to 2
               x=new Long(n.substring(i,j--)
                         //    Take the substring [`i`, `j`) from the input,
            );           //    convert it to a long, and set it as `x`
          k<x;           //    Inner loop as long as `k` is still smaller than `x`
        x=x%k++<1?       //     If `x` is divisible by `k`:
           0             //      Set `x` to 0
          :              //     Else:
           x);           //      Leave `x` unchanged
      if(x>1)            //    If `x` is now larger than 1 (a.k.a. If `x` is a prime):
        System.out.println(x);}}
                         //     Print `x` with a trailing newline to STDOUT

2

MATL , 9 bajtów

&XfXUtZp)

Wypróbuj online!

Wyjaśnienie

&Xf   % Implicit input: string. Push cell array of non-empty substrings
XU    % Convert to number. Vectorizes
t     % Duplicate
Zp    % Isprime. Vectorizes.
)     % Index. Keeps substrings indicated by the previous result. Implicit display

2

Bash + GNU Core Utils: 80 77 bajtów

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|grep -oP ': \K\d+$'
}

To nie może być najkrótsze, ale mam problem z wymyśleniem czegoś lepszego. Potrzebna pomoc!

Trzymając się tylko POSIX, otrzymałem 82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}

Czy krojenie łańcucha Bash może pomóc? Szkoda, że ​​zakresy nawiasów klamrowych zostały rozszerzone przed parametrami ...
Toby Speight

@TobySpeight, które wymagałyby dwóch pętli (jednej na początek, drugiej na końcu), nie wspominając o tym, że nie można używać zmiennych w podstawieniu krojenia. Zsh na to pozwala! Główną drogą do skrótu w moim umyśle jest użycie Awk do wygenerowania wszystkich podciągów.
markasoftware





0

Pyth, 8 bajtów

fP_TsM.:

Zestaw testowy

Pobiera dane wejściowe jako ciąg znaków, wyświetla listę liczb całkowitych. Może również przyjmować dane wejściowe int , dodając `na końcu dodatkowy bajt.

Wyjaśnienie:
fP_TsM.:  | Full code
fP_TsM.:Q |  with implicit variables added
          | Print (implicit)
      .:Q |  list of all substrings of the input
    sM    |   converted to integers
fP_T      |    filtered for prime numbers

I `po prostu konwertuje intna str.


0

Wolfram Language (Mathematica) , 40 bajtów

Select[PrimeQ@*FromDigits]@*Subsequences

Wypróbuj online!

Dane wejściowe i wyjściowe są listami cyfr. W przypadku braku podnumerych zwracana jest pusta lista {}.

Używa @*do Compositionfunkcji. Subsequencesdaje listę wszystkich podsekwencji danych wejściowych i Select[PrimeQ@*FromDigits]jest formą operatora, Selectktóra zwraca listę wszystkich elementów, dla których PrimeQ@*FromDigitszwraca True.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.