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 :)

Regis Portalez
źródło
3
Witamy w PPCG!
Luis Felipe De Jesus Munoz
Niezwykle spokrewniony .
user202729,
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.

Kaldo
źródło
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.

Sean
źródło
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!

ovs
źródło
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

Japt , 13 10 bajtów

Dzięki @Shaggy -3 bajtów

ò fj f@søX

ò fj f@søX              Full program
                        implicity input
ò                       inclusive range [this - 1]
  fj                    filter primes and
     f@søX              values contained in input

Wypróbuj online!

Luis Felipe De Jesus Munoz
źródło
10 bajtów
Kudłaty
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]
Jonathan Allan
źródło
Æ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
Kevin Cruijssen
źródło
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
Luis Mendo
źródło
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}'
}
markasoftware
źródło
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
2

R , 60 bajtów

function(v)Filter(function(i)grepl(i,v)&sum(!i%%1:i)==2,1:v)

Wypróbuj online!

Niezbyt wydajny, zainspirowany odpowiedzią @ovs python 2

digEmAll
źródło
1
Niesamowite! zasady funprog !
JayCe
1

Python 2 , 115 114 bajtów

f=lambda s:s and[n for n in[int(s[j:])for j in range(len(s))]if n>1and all(n%i for i in range(2,n))]+f(s[:-1])or[]

Wypróbuj online!

TFeld
źródło
if~-n*all(n%i for i in range(2,n))ratuje 4.
Pan Xcoder
0

Czysty , 108 bajtów

import StdEnv,Data.List
$s=nub[n\\u<-inits s,n<-map(toInt o toString)(tails u)|n>1&&all(\m=n/m*m<n)[2..n-1]]

Wypróbuj online!

Obrzydliwe
źródło
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.

hakr14
źródło
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.

ngenisis
źródło
0

Matlab, 89 bajtów

function[m]=f(x),m=1;for i=1:length(x),m=[m;str2num(combnk(x,i))];end,m=m(isprime(m));end

Wypróbuj online!

DimChtz
źródło