Primzahlen in großer Zahl

11

Bei einer großen Anzahl (in Basis 10), z. B. 1234567891011121314151617, finden Sie darin "Primzahlen".
Eine Primzahl "Subnummer" ist eine aufeinanderfolgende Folge von Ziffern (aus der Eingabe entnommen), die eine Primzahl (in Basis 10) darstellt.

  • Eingabe : Eine Zahl (entweder eine Zeichenfolge, eine Datei oder was auch immer Sie möchten).
  • Ausgabe : Alle primären Subnummern sind irgendwie getrennt (entweder in einer Liste, einer Datei, durch Kommas getrennte Zeichenfolgen ...). Wenn das Ergebnis leer ist, können Sie eine beliebige Konvention verwenden (fest codierte Zeichenfolge, leere Zeichenfolge, Kauderwelsch, aber das Programm sollte dies nicht tun) Absturz.
  • Beispiel
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. leere Ausgabe]

Das ist Code-Golf. Das kürzeste Programm gewinnt!
[bearbeiten]: zusätzliche Regel, Programm muss erklärt werden! Nicht jeder spricht fließend Jelly :)

Regis Portalez
quelle
3
Willkommen bei PPCG!
Luis Felipe De Jesus Munoz
Extrem verwandt .
user202729
1
unbestimmt. Mach, was immer du willst.
Regis Portalez
1
Tipp: Das ist zu früh, um eine Antwort zu akzeptieren. Es kann andere davon abhalten, Lösungen zu veröffentlichen.
Shaggy
2
@RegisPortalez willkommen und schöne Herausforderung! Ich habe festgestellt, dass die Funktion "Akzeptieren" in PPCG nicht mehr so ​​häufig verwendet wird wie auf den anderen Websites im Netzwerk. Wir neigen dazu, nette Antworten in jeder Sprache zu schätzen.
ngm

Antworten:

6

05AB1E (Legacy) , 3 Bytes

Œʒp

Probieren Sie es online aus!

Teilzeichenfolgen der Eingabe, die prim sind.

Kaldo
quelle
Das wird schwer zu
verkürzen sein
Richtige Sprache für diese Aufgabe
Jonathan Allan
5
@mob Das hängt von der Kodierung ab. In der 05AB1E-Codierung ist diese Antwort 3 Byte lang.
Dennis
2
Demnach ist 34567 = 13 * 2659 Primzahl, scheint falsch: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh
2
@frosqh Es ist tatsächlich ein Fehler der Funktion p (prime) in der neuen Version 05AB1E: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA Es wurde bereits im Repository behoben, aber nicht auf TIO übertragen. Ich habe meine Antwort inzwischen auf die Legacy-Version umgestellt.
Kaldo
6

Perl 6 , 28 Bytes

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

Probieren Sie es online aus!

Das :ex("erschöpfende") Flag für den Übereinstimmungsoperator bewirkt, mdass jede mögliche Übereinstimmung .+(dh jede Teilzeichenfolge mit einem oder mehreren Zeichen) zurückgegeben wird, auch überlappende. Der Hyperoperator wandelt diese Liste von MatchObjekten in Zahlen um, die dann nach Primität gefiltert werden grep &is-prime.

Sean
quelle
Hier wollte ich mit{+«m:ex/(.+)<?{$0.is-prime}>/}
Brad Gilbert b2gills
@ BradGilbertb2gills Das habe ich auch versucht! Ich bin etwas enttäuscht, dass es länger war.
Sean
Vielen Dank für die Erklärung - immer hilfreich für Perl 4 Dinosaurier wie mich!
Toby Speight
5

Python 2 , 66 65 Bytes

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

Probieren Sie es online aus!

ovs
quelle
Sollte sein while k<=noder, um 0 Bytes zu kosten,while~n+k
Jonathan Allan
@ JonathanAllan danke. Zuerst dachte ich, die Nummer selbst sollte von der Ausgabe ausgeschlossen werden, aber es scheint, dass dies nicht der Fall ist.
ovs
@ JonathanAllan Kannst du bitte den Code aus der whileAnweisung erklären ? Ich habe diese Art von Codes noch nie gesehen. Auch nicht gesehen, Verwendung von `` , was es tut?
Tarit Goswami
1
@taritgoswami while stmt:wird ausgeführt, solange stmtein Wert vorliegt, der von Python als wahr angesehen wird. Die einzige falsche Ganzzahl in Python ist 0. Daher wird der Code als ausgeführt ~n+k != 0. ~ist der bitweise Komplementoperator und ~nentspricht äquivalent zu -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Da wir Inkrementieren kvon 1in jedem Betrieb, k != n + 1ist in diesem Fall entspricht k <= n.
ovs
1
@taritgoswami Und `n`ist das gleiche wie repr(n)in Python 2. (funktioniert nicht in Python 3).
ovs
3

Japt , 13 10 Bytes

Danke @Shaggy -3 Bytes

ò 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

Probieren Sie es online aus!

Luis felipe De jesus Munoz
quelle
10 Bytes
Shaggy
3

Gelee ,  5  4 Bytes

-1 danke an Kevin Cruijssen ( ist ein Alias ​​für ÆP)

ẆḌẒƇ

Ein monadischer Link, der eine Liste von Ziffern * akzeptiert, die eine Liste von Primzahlen ergibt.

* Gehen Sie zu "entweder einer Zeichenfolge, einer Datei oder was auch immer Sie möchten" - um eine Ganzzahl zu verwenden, stellen Sie dem Code ein Präfix voran D

Probieren Sie es online aus!

Wie?

ẆḌẒƇ - 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
quelle
ÆPkann sein, wenn ich mich nicht irre?
Kevin Cruijssen
Ah ja das ist einer der neuen Aliase - danke!
Jonathan Allan
2

Java 8, 148 147 Bytes

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);}}

Probieren Sie es online aus.

Erläuterung:

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
quelle
2

MATL , 9 Bytes

&XfXUtZp)

Probieren Sie es online aus!

Erläuterung

&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
quelle
2

Bash + GNU Core Utils: 80 77 Bytes

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

Dies kann nicht der kürzeste sein, aber ich habe Probleme, etwas Besseres zu finden. Stellenangebote!

Wenn ich mich nur an POSIX halte, bekomme ich 82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}
markasoftware
quelle
Könnte Bash String Slicing helfen? Es ist eine Schande, dass Zahnspangenbereiche vor den Parametern erweitert werden ...
Toby Speight
@TobySpeight, für das zwei Schleifen erforderlich wären (eine für den Anfang, eine für das Ende), ganz zu schweigen davon, dass Sie innerhalb einer Slicing-Substitution keine Variablen verwenden können. Zsh erlaubt es aber! Der Hauptweg zur Kürze in meinem Kopf besteht darin, Awk zu verwenden, um alle Teilzeichenfolgen zu generieren.
Markasoftware
2

R , 60 Bytes

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

Probieren Sie es online aus!

Nicht wirklich effizient, inspiriert von der Antwort von @ovs Python 2

digEmAll
quelle
1
Genial! Funprog Regeln!
JayCe
1

Python 2 , 115 114 Bytes

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[]

Probieren Sie es online aus!

TFeld
quelle
if~-n*all(n%i for i in range(2,n))spart 4.
Mr. Xcoder
0

Pyth, 8 Bytes

fP_TsM.:

Testsuite

Nimmt die Eingabe als Zeichenfolge und gibt eine Liste von Ganzzahlen aus. Kann auch als Eingabe eingegeben int werden, indem `am Ende ein zusätzliches Byte hinzugefügt wird .

Erläuterung:
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

Und `konvertiert einfach intzu str.

hakr14
quelle
0

Wolfram Language (Mathematica) , 40 Bytes

Select[PrimeQ@*FromDigits]@*Subsequences

Probieren Sie es online aus!

Eingabe und Ausgabe sind Listen von Ziffern. Wenn keine Hauptunternummern vorhanden sind, wird die leere Liste {}zurückgegeben.

Verwendet @*für CompositionFunktionen. Subsequencesgibt eine Liste aller Teilsequenzen der Eingabe an und Select[PrimeQ@*FromDigits]ist eine Operatorform, Selectdie eine Liste aller Elemente PrimeQ@*FromDigitszurückgibt, für die zurückgegeben wird True.

Genisis
quelle
0

Matlab, 89 Bytes

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

Probieren Sie es online aus!

DimChtz
quelle