Drucken / Ausgeben aller positiven Zahlen, bei denen jeder mehrstellige Teilstring in seiner Dezimaldarstellung ebenfalls eine Primzahl ist.

15

Aufgabe

Ihre Aufgabe ist es, alle positiven Zahlen zu drucken oder auszugeben, in denen jeder mehrstellige Teilstring in seiner Dezimaldarstellung auch eine Primzahl ist. Wenn die Zahl mindestens 2 Ziffern hat, würde dies bedeuten, dass die Zahl selbst auch eine Primzahl sein muss.

Beispiel

  • 6197in der Folge ist , weil jedes Teilzeichen in mehrstelligen 6197prim ist , nämlich: 61, 19, 97, 619, 197, 6197(selbst).
  • Beachten Sie, dass dies 6keine Primzahl ist, sich aber 6197immer noch in der Sequenz befindet, da 6es sich nicht um eine mehrstellige Teilzeichenfolge von handelt 6197.
  • 8ist auch in der Sequenz, weil jeder mehrstellige Teilstring in 8Primzahl ist. Es gibt keine mehrstellige Teilzeichenfolge 8, daher handelt es sich um eine leere Wahrheit .

Technische Daten

  • Standard Lücken gelten, mit der Ausnahme , dass Sie erlaubt die Ausgabe oder Speicherung von Informationen zu codieren , um die Ausgabe in Ihrem Programm verwendet.
  • Die Zahlen in der Ausgabe können in beliebiger Reihenfolge sein .
  • Die Zahlen in der Ausgabe dürfen Duplikate haben.
  • Sie können ein beliebiges Trennzeichen verwenden , wenn Sie anstelle der Ausgabe drucken möchten.
  • Sie erlaubt Präfix und / oder Postfix ausgegeben , wenn Sie anstelle von Ausgabe drucken wählen.
  • Der Abscheider und der Präfix und Postfix des möglicherweise nicht enthalten , keine Ziffern (U + U + 0030 bis 0039).

Vollständige Liste (58 Artikel)

1
2
3
4
5
6
7
8
9
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
113
131
137
173
179
197
311
313
317
373
379
419
431
479
613
617
619
673
719
797
971
1373
3137
3797
6131
6173
6197
9719

Referenz


Wie immer können Sie in den Kommentaren alles ansprechen, was ich klarstellen sollte.

Undichte Nonne
quelle
2
Ich werde jedem außer @Fatalize, der die kleinste Antwort auf diese Herausforderung in Brachylog ( Wiki-Link ) ( TIO-Link ) ( Chatroom ) einreicht, +300 Kopfgeld geben .
Undichte Nonne
2
Schlechtes @Fatalize. Das bekommen Sie, um eine Sprache zu erstellen
Luis Mendo
3
Ich habe eine 50-Byte-Antwort :(
Fatalize
1
Muss das Programm beendet werden?
Tödlich
2
@LeakyNun Sieht so aus, als würde jemand dieses Kopfgeld bekommen!
Jordanien

Antworten:

7

05AB1E , 15 13 Bytes

Code:

4°GN§ŒD9›ÏpP–

Erläuterung:

  G            # For N in range 1,
4°             #   10000
   N           # Push N
    §          # Convert that to string
     Œ         # Get all substrings
      D9›Ï     # Keep all substrings that are greater than 9
          p    # Check each of them if they are prime
           P   # Product
            –  # If 1, print N

Verwendet die CP-1252- Codierung. Probieren Sie es online aus! (kann einige Sekunden dauern).

Adnan
quelle
5

Brachylog , 18 17 15 16 15 Bytes

ℕ₁<l4&≜sᶠ{Ḋ|ṗ}ᵐ

Probieren Sie es online aus!

-1 Byte nach einer Diskussion mit Fatalize hat mich dazu inspiriert zu sehen, was passiert, wenn ich das lund das <herum tausche .

Dieses Prädikat generiert die Ausgabe über die Eingabevariable, solange die Ausgabevariable nicht eingeschränkt wird. Da Duplikate zulässig sind, wird jede Zahl mit einer Multiplizität von 2 hoch der Zahl ihrer Ziffern erzeugt, bei denen es sich um Primzahlen handelt.

ℕ₁                 The input variable is a natural number
  <                less than
   l4              some number with length 4 (maximized as 9999).
     &≜            Assign a number to the input, and assert that
       sᶠ          every substring of it
         { | }ᵐ    is either
            ṗ      a prime number
          Ḋ        or a single digit.

Ältere Versionen:

{≜ℕsᶠ{Ḋ!|ṗ}ᵐ&}ᶠ⁵⁹b
7^₅⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
∧8ḟ>?ℕ₁≜sᶠ{Ḋ|ṗ}ᵐ
Nicht verwandte Zeichenfolge
quelle
Dies ist 16 Bytes, aber nicht getestet, da die Überprüfung von bis zu 40320 nicht gerade schnell ist:8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
Nicht verwandte
Es endet gut mit einer Obergrenze von 10000, stattdessen: tio.run/##SypKTM6ozMlPN/r/39AACB7NX/…
Nicht verwandte
4

Brachylog , 18 Bytes

Eine weitere Brachylog-Lösung. Ich konnte es nicht kürzer als die Brachylog-Lösung von Erik The Outgolfer machen. es ist genau die gleiche Länge, nähert sich aber der Generation aus der entgegengesetzten Richtung.

{≜ℕ{sℕ₁₀}ᶠṗᵐ&}ᶠ⁵⁹b

Es sieht so aus, als hätte Unrelated String dies von vielen Charakteren geschlagen, denen ich gratuliere.

Erläuterung:

{≜ℕ                Brute force all nonnegative integers to find any that match the constraints
   {s               Create a predicate that finds all subsequences of digits of said integer
     ℕ₁₀            Constrains those subsequences to be >= 10
        }ᶠ          Finds all possible values of that predicate: all multi-digit subsequences
          ṗᵐ        Apply a primality constraint to all of those subsequences
            &       Make the predicate output the input integer rather than a prime subsequence
             }ᶠ⁵⁹   Find the first 59 results (all of the puzzle's solutions, and zero)
                 b  Remove the first element of the list, i.e. 0

Probieren Sie es online aus!

IFcoltransG
quelle
3

Gelee , 17 Bytes

DẆṖÐfḌÆP€Ạ
³²RÇÐf

Meine erste Jelly Antwort! 3 Bytes dank @Leaky Nun gespart !

Probieren Sie es online aus

Erläuterung:

DẆṖÐfḌÆP€Ạ      The helper link, which checks if a given number satisfy the conditions.
DẆ              Convert the argument to a list of its digits and get all its substrings.
  ṖÐf           Remove all lists of length 1.
     ḌÆP€Ạ      Convert back each element to an integer and check if all of them are prime.

³²RÇÐf          Main link.
³²              Create a 100 and square it, which gives 10000.
  R             Create a list from 1 to it.
   ÇÐf          Filter out all the elements where the helper link gives false.
Loovjo
quelle
Herzlichen Glückwunsch zu Ihrer ersten Jelly-Antwort!
Undichte Nonne
2
RÇÐfkann durch ersetzt werden Ç€T. ṖÐfḌÆP€kann durch ersetzt werden ḌḟDÆP.
Dennis
3

Java 8, 182 Bytes

v->{for(int n=0;++n<1e4;)if(P(n)>0)System.out.println(n);}int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}int P(int n){return n>99?p(n)*p(n%100)*p(n%1000)*P(n/10):n<10?n:p(n);}

Port of Gastropners C (gcc) Antwort , also stellen Sie sicher, dass Sie seine Antwort positiv bewerten!

Probieren Sie es online aus.

Erläuterung:

// Loop in range [1,10000), and print any primes corresponding to the challenge description
v->{for(int n=0;++n<1e4;)if(P(n)>0)System.out.println(n);}

// Checks if the given integer is a prime (return unchanged input if prime, 0 if not)
int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

// Recursive method that checks if every part of length 2+ is a prime, or is below 10
int P(int n){return n>99?p(n)*p(n%100)*p(n%1000)*P(n/10):n<10?n:p(n);}
Kevin Cruijssen
quelle
2

PowerShell v2 +, 107 104 Byte

1..10+(11..1e4|?{($x=11..($i=$_)|?{"$i"-match$_}).count-eq($x|?{'1'*$_-match'^(?!(..+)\1+$)..'}).count})

Warnung: Etwas langsam

Schleift von 11bis 1e4(dh 10000) und zieht Zahlen mit dem Where-ObjectSelektor ( |?{...}) heraus. Die Klausel besteht aus zwei Komponenten - der ersten Schleife von 11bis zur aktuellen Nummer und Where-Objectzum Herausziehen der Nummern, die einen Teilstring der aktuellen Nummer bilden (über den -matchRegex-Operator). Wir speichern diese Teilzeichenfolgen in $x. Der zweite Teil durchläuft $xund dient Where-Objectzum Herausziehen aller Primzahlen unter Verwendung des primären Regex . Wir nehmen dann das .countvon beiden und prüfen tatsächlich, ob diese tatsächlich sind -eq. Zum Beispiel 971wird haben $x = (71,97,971)und jeder von diesen ist prim, so 3-eq3ist $TRUEund 971wird somit ausgewählt.

Dieses Ergebnis ist mit einem Bereich Array-verkettet 1..10. Das resultierende Array bleibt in der Pipeline und die Ausgabe ist implizit, wobei standardmäßig eine neue Zeile zwischen den Elementen steht.

AdmBorkBork
quelle
2

C (gcc) , 144 142 140 136 134 132 Bytes

-2 danke an Kevin Cruijssen. -2 dank Deckenkatze

... Und inspiriert davon können wir weitere 2 Bytes aus dieser for-Schleife erhalten.

Auch schamlos hat der eher bessere Prime Checker aus Kevin Cruijssens Antwort für einen weiteren -4 geklaut .

p(n,i){for(i=2;i<n;)n*=n%i++||n<10;i=n;}P(n){n=p(n)*(n<99||p(n%100)*p(n%1000)*P(n/10));}f(n){for(n=1e4;--n;)P(n)&&printf("%d\n",n);}

Probieren Sie es online aus!

Gastropner
quelle
||n<10kann |n<10und for(n=1;n<1e4;n++)kann for(n=0;++n<1e4;)für -2 Bytes sein.
Kevin Cruijssen
@ KevinCruijssen Prost!
Gastropner
2

Malbolge Unshackled (20-Trit-Rotationsvariante), 2.5254e7 Bytes oder 1.9809e7 Bytes

Die Größe dieser Antwort überschreitet die maximale Größe des postbaren Programms (eh), sodass sich der Code in meinem GitHub-Repository befindet (Hinweis: Kopieren Sie den Code nicht mit STRG + A und STRG + C, klicken Sie einfach mit der rechten Maustaste und klicken Sie auf "Zielelement speichern unter". .. ").

Wie führe ich das aus?

Dies könnte ein schwieriger Teil sein, da der naive Haskell-Dolmetscher ewig brauchen wird, um dies auszuführen. TIO hat einen anständigen Malbogle Unshackled-Interpreter, aber leider kann ich ihn nicht verwenden (Einschränkungen).

Das beste, das ich finden konnte, ist die Variante mit fester 20-Trit-Rotationsbreite, die sehr gut funktioniert.

Um den Dolmetscher etwas schneller zu machen, habe ich alle Schecks von Matthias Lutters Malbolge Unshackled-Dolmetscher entfernt.

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char* translation = "5z]&gqtyfr$(we4{WP)H-Zn,[%\\3dL+Q;>U!pJS72Fh"
        "OA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G\"i@";

typedef struct Word {
    unsigned int area;
    unsigned int high;
    unsigned int low;
} Word;

void word2string(Word w, char* s, int min_length) {
    if (!s) return;
    if (min_length < 1) min_length = 1;
    if (min_length > 20) min_length = 20;
    s[0] = (w.area%3) + '0';
    s[1] = 't';
    char tmp[20];
    int i;
    for (i=0;i<10;i++) {
        tmp[19-i] = (w.low % 3) + '0';
        w.low /= 3;
    }
    for (i=0;i<10;i++) {
        tmp[9-i] = (w.high % 3) + '0';
        w.high /= 3;
    }
    i = 0;
    while (tmp[i] == s[0] && i < 20 - min_length) i++;
    int j = 2;
    while (i < 20) {
        s[j] = tmp[i];
        i++;
        j++;
    }
    s[j] = 0;
}

unsigned int crazy_low(unsigned int a, unsigned int d){
    unsigned int crz[] = {1,0,0,1,0,2,2,2,1};
    int position = 0;
    unsigned int output = 0;
    while (position < 10){
        unsigned int i = a%3;
        unsigned int j = d%3;
        unsigned int out = crz[i+3*j];
        unsigned int multiple = 1;
        int k;
        for (k=0;k<position;k++)
            multiple *= 3;
        output += multiple*out;
        a /= 3;
        d /= 3;
        position++;
    }
    return output;
}

Word zero() {
    Word result = {0, 0, 0};
    return result;
}

Word increment(Word d) {
    d.low++;
    if (d.low >= 59049) {
        d.low = 0;
        d.high++;
        if (d.high >= 59049) {
            fprintf(stderr,"error: overflow\n");
            exit(1);
        }
    }
    return d;
}

Word decrement(Word d) {
    if (d.low == 0) {
        d.low = 59048;
        d.high--;
    }else{
        d.low--;
    }
    return d;
}

Word crazy(Word a, Word d){
    Word output;
    unsigned int crz[] = {1,0,0,1,0,2,2,2,1};
    output.area = crz[a.area+3*d.area];
    output.high = crazy_low(a.high, d.high);
    output.low = crazy_low(a.low, d.low);
    return output;
}

Word rotate_r(Word d){
    unsigned int carry_h = d.high%3;
    unsigned int carry_l = d.low%3;
    d.high = 19683 * carry_l + d.high / 3;
    d.low = 19683 * carry_h + d.low / 3;
    return d;
}

// last_initialized: if set, use to fill newly generated memory with preinitial values...
Word* ptr_to(Word** mem[], Word d, unsigned int last_initialized) {
    if ((mem[d.area])[d.high]) {
        return &(((mem[d.area])[d.high])[d.low]);
    }
    (mem[d.area])[d.high] = (Word*)malloc(59049 * sizeof(Word));
    if (!(mem[d.area])[d.high]) {
        fprintf(stderr,"error: out of memory.\n");
        exit(1);
    }
    if (last_initialized) {
        Word repitition[6];
        repitition[(last_initialized-1) % 6] =
                ((mem[0])[(last_initialized-1) / 59049])
                    [(last_initialized-1) % 59049];
        repitition[(last_initialized) % 6] =
                ((mem[0])[last_initialized / 59049])
                    [last_initialized % 59049];
        unsigned int i;
        for (i=0;i<6;i++) {
            repitition[(last_initialized+1+i) % 6] =
                    crazy(repitition[(last_initialized+i) % 6],
                        repitition[(last_initialized-1+i) % 6]);
        }
        unsigned int offset = (59049*d.high) % 6;
        i = 0;
        while (1){
            ((mem[d.area])[d.high])[i] = repitition[(i+offset)%6];
            if (i == 59048) {
                break;
            }
            i++;
        }
    }
    return &(((mem[d.area])[d.high])[d.low]);
}

unsigned int get_instruction(Word** mem[], Word c,
        unsigned int last_initialized,
        int ignore_invalid) {
    Word* instr = ptr_to(mem, c, last_initialized);
    unsigned int instruction = instr->low;
    instruction = (instruction+c.low + 59049 * c.high
            + (c.area==1?52:(c.area==2?10:0)))%94;
    return instruction;
}

int main(int argc, char* argv[]) {
    Word** memory[3];
    int i,j;
    for (i=0; i<3; i++) {
        memory[i] = (Word**)malloc(59049 * sizeof(Word*));
        if (!memory) {
            fprintf(stderr,"not enough memory.\n");
            return 1;
        }
        for (j=0; j<59049; j++) {
            (memory[i])[j] = 0;
        }
    }
    Word a, c, d;
    unsigned int result;
    FILE* file;
    if (argc < 2) {
        // read program code from STDIN
        file = stdin;
    }else{
        file = fopen(argv[1],"rb");
    }
    if (file == NULL) {
        fprintf(stderr, "File not found: %s\n",argv[1]);
        return 1;
    }
    a = zero();
    c = zero();
    d = zero();
    result = 0;
    while (!feof(file)){
        unsigned int instr;
        Word* cell = ptr_to(memory, d, 0);
        (*cell) = zero();
        result = fread(&cell->low,1,1,file);
        if (result > 1)
            return 1;
        if (result == 0 || cell->low == 0x1a || cell->low == 0x04)
            break;
        instr = (cell->low + d.low + 59049*d.high)%94;
        if (cell->low == ' ' || cell->low == '\t' || cell->low == '\r'
                || cell->low == '\n');
        else if (cell->low >= 33 && cell->low < 127 &&
                (instr == 4 || instr == 5 || instr == 23 || instr == 39
                    || instr == 40 || instr == 62 || instr == 68
                    || instr == 81)) {
            d = increment(d);
        }
    }
    if (file != stdin) {
        fclose(file);
    }
    unsigned int last_initialized = 0;
    while (1){
        *ptr_to(memory, d, 0) = crazy(*ptr_to(memory, decrement(d), 0),
                *ptr_to(memory, decrement(decrement(d)), 0));
        last_initialized = d.low + 59049*d.high;
        if (d.low == 59048) {
            break;
        }
        d = increment(d);
    }
    d = zero();

    unsigned int step = 0;
    while (1) {
        unsigned int instruction = get_instruction(memory, c,
                last_initialized, 0);
        step++;
        switch (instruction){
            case 4:
                c = *ptr_to(memory,d,last_initialized);
                break;
            case 5:
                if (!a.area) {
                    printf("%c",(char)(a.low + 59049*a.high));
                }else if (a.area == 2 && a.low == 59047
                        && a.high == 59048) {
                    printf("\n");
                }
                break;
            case 23:
                a = zero();
                a.low = getchar();
                if (a.low == EOF) {
                    a.low = 59048;
                    a.high = 59048;
                    a.area = 2;
                }else if (a.low == '\n'){
                    a.low = 59047;
                    a.high = 59048;
                    a.area = 2;
                }
                break;
            case 39:
                a = (*ptr_to(memory,d,last_initialized)
                        = rotate_r(*ptr_to(memory,d,last_initialized)));
                break;
            case 40:
                d = *ptr_to(memory,d,last_initialized);
                break;
            case 62:
                a = (*ptr_to(memory,d,last_initialized)
                        = crazy(a, *ptr_to(memory,d,last_initialized)));
                break;
            case 81:
                return 0;
            case 68:
            default:
                break;
        }

        Word* mem_c = ptr_to(memory, c, last_initialized);
        mem_c->low = translation[mem_c->low - 33];

        c = increment(c);
        d = increment(d);
    }
    return 0;
}

Leistungshinweise

Die Anwendung lief ungefähr 40 Minuten auf meinem Computer und erzeugte HEX-Nummern der Sequenz. Ich habe es nach ungefähr einer Stunde Berechnungen gestoppt und es endete mit 0x11.

Beachten Sie, dass sich diese Antwort von meiner anderen unterscheidet, da diese tatsächlich die Zahlen berechnet und so erstellt werden kann, dass sie auf unbestimmte Zeit berechnet werden.

Die Anwendung weist den Spinup-Puffer zu, der etwa 7 Gigabyte groß ist. Bereiten Sie also Ihren freien RAM besser vor.

Alternative Variante

Die alternative Variante verbraucht etwa 2 Gigabyte weniger Speicher, erzeugt jedoch die Ausgabe in Form von ASCII-Zeichen (0 = ASCII (0x0), 10 = Zeilenumbruch usw.) und ist hier verfügbar . Aufgrund der Herausforderungsanforderungen konkurriert es jedoch nicht

Krzysztof Szewczyk
quelle
Bei Code Golf geht es darum, kurze Antworten zu geben.
Alfe
2
@Alfe Malbolge ist eine Sprache, deren Programmierung äußerst schwierig ist (Wikipedia-Link) . Die Tatsache, dass dies überhaupt möglich ist , ist ziemlich beeindruckend.
Giuseppe
4
Also in der Tat, dies ist nur eine kurze Antwort. Nur die Standards werden verschoben. Leicht.
Alfe
3
@ Alfe, du kannst gerne versuchen, ein paar Bytes zu rasieren! ;-)
Giuseppe
2

Python 3 , 118 Bytes

r=range(9720)
for n in r[1:]:all(all(l%k+9//l for k in r[2:l])for l in(n%10**(i%5)//10**(i//5)for i in r))and print(n)

Probieren Sie es online aus!

Erläuterung

Warnung: Diese Lösung enthält keine tatsächlichen Zeichenfolgen.

r=range(9720)
for n in r[1:]:                                        # For each positive integer up to 9720
 all( ... for l in(n%10**(i%5)//10**(i//5)for i in r)) # Check for all its substrings
  all(l%k ... for k in r[2:l])                         # If it is either prime
   +9//l                                               # Or smaller than 10
and print(n)                                           # Then print
Jitse
quelle
1

Ruby, 81 + 8 = 89 Bytes

+8 Bytes für -rprime.

puts (?1..?9*4).select{|m|(r=2..m.size).all?{|i|r.all?{|j|m[i-2,j].to_i.prime?}}}

Siehe es auf repl.it: https://repl.it/CniR/2

Jordan
quelle
1

Perl 6 ,  47 44  43 Bytes

for 1..9719 {all(m:ex/..+/).Int.is-prime&&.say}
put grep {is-prime +all(m:ex/..+/):},1..9719
put grep {is-prime +all m:ex/..+/:},1..9719

Erläuterung:

# print the values space separated, with trailing newline
put

# that match
grep -> $_ {

  # call the method 「.is-prime」 ( that is what 「:」 is for )
  # (autothreaded)
  is-prime

  # convert following to numeric (autothreaded)
  +
  # a junction of
  all(
    # all substrings 2 characters or greater
    $_ ~~ m :exhaustive / . .+ /
  )

  # needed to indicate that 「is-prime」 is a method call
  :

},

# in this Range
1..9719
Brad Gilbert b2gills
quelle
1

C #, 261 249 247 Bytes

12 Bytes dank Leaky Nun gespart

()=>{Action<int>w=System.Console.WriteLine;int i=0,n,j,k,p,m,b;for(;++i<10001;){n=(i+"").Length;if(n<2)w(i);else{b=1;for(j=1;++j<=n;)for(k=0;k+j<=n;){p=int.Parse((i+"").Substring(k++,j));if(p%2<1)b=0;for(m=3;m<p;m+=2)if(p%m<1)b=0;}if(b>0)w(i);}}};

Dies kompiliert zu a Func<List<int>>.

Die formatierte Version sieht folgendermaßen aus:

() =>
{
    Action<int> w = System.Console.WriteLine;

    int i = 0, n, j, k, p, m, b;

    for (; ++i < 10001;)
    {
        n = (i + "").Length;

        if (n < 2)
            w(i);

        else
        {
            b = 1;
            for (j = 1; ++j <= n; )
                for (k = 0; k + j <= n; )
                {
                    p = int.Parse((i + "").Substring(k++, j));

                    if (p % 2 < 1)
                        b = 0;

                    for (m = 3; m < p; m += 2)
                        if (p % m < 1)
                            b = 0;
                }

            if (b > 0)
                w(i);
        }
    }
};
TheLethalCoder
quelle
Drucken Sie es einfach direkt aus, ohne eine Liste zu verwenden
Leaky Nun
Anstelle von falseoder trueverwenden Sie 0>1und0<1
Leaky Nun
Sie können verweisen dies für zusätzliche Golf - Tipps.
Undichte Nonne
@LeakyNun Danke für die Tipps, normalerweise möchte ich eine Art Golfversion veröffentlichen und dann von dort aus weiterziehen.
TheLethalCoder
1

Swift 4 , 144 Bytes

let p={n in !(2..<n).contains{n%$0<1}}
print((1...971).filter{$0<10||p($0)&&($0<100||p($0/10)&&p($0%100))}+[1373,3137,3797,6131,6173,6197,9719])

Probieren Sie es online aus!

Erläuterung

let p={n in !(2..<n).contains{n%$0<1}} // Helper function p, tests if a number is prime
print((1...971).filter{                // Print every number n in the range 1 to 971
 $0<10                                 //  that is less than 10
 ||p($0)&&                             //  or a prime and
 ($0<100                               //   is less than 100 or
  ||p($0/10)&&p($0%100))}              //   n/10 and n%100 are primes
+[1373,3137,3797,6131,6173,6197,9719]) // Print the four digit numbers
Herman L.
quelle
1

JavaScript (Node.js) , 130 Byte

wenn ich unendlich Stapel annehmen kann i*i<=n&&kann entfernt und wird i*i>nabwechselnd auf i>=ndas den Code von 9 Bytes reduziert und vielleicht wichtigste Funktion zu rekursiven konvertieren: https://tio.run/##LYpBDoIwEEX33AMyAxVbXUmccgX2xkWDRYeQaSPqyrvXkrj5ef/lze7j1vHJ8bWTcPMpTQRMWjm6XJFs0/DZ@EM/ASunBmCsKtfG9/rIiJ0rIoEoJpNbKXPdx@1jx5akGEiytqdNYp2nNFr / wR @ xHkD2Rn81dpLGIGtYfLuEO0yAmH4 (119 Byte)

_=>eval(`for(a=[i=1];++i<1e4;)P(i)&&a.push(i)`)||a
p=(n,i=1)=>i*i<=n&&n%++i?p(n,i):n%i
P=n=>n>9?p(n)*p(n%100)*p(n%1e3)*P(n/10|0):n

Probieren Sie es online aus!

DanielIndie
quelle
1

Malbolge , 1361 Bytes

Einfache und langweilige Version. Zeigt die höchsten Zahlen an.

D'`r^"!=[YG3yUCvA-csNqp-nJ$HYFgDC#AbQ,|*)\rwvutm3kSonmlkdihg`&dc\aZ_X|V[ZYXQPt7SRQPOHGkKJIHG@d>=<A:98\}|:981U5.-2+0/.'K%$#G!E}e#z!~}v<]yxwpun4rkj0nmfN+ihaf_^$\a`_XW{>=YXWVONrLKPINGkE-IBAe(>=<;_?>=}|:3W1w543,P0).-&J*)(!E}|B"!~}|{zyr8potml2jongfkjibg`&d]\"`_XW{>=YXWVONr54JIHMFj-,HGF?>b%A@?87[;:981w543,P0).-&J*j(!EfeB"!~}_u;yrqpun4rqpihmlkjihg`&d]\"`_X|\[ZYXQuUNMLQJnH0LKJIBAe(>=<`#"8\<5Y9270T43,Pqp.-&J$)"!~D|#"y~}|u;s9qvotsrk1inglkdihg`&d]\"Z~XWVUZYXQu87SLKo2NGFjDIHGF?>bBA#"8\6;:981Uv.32+*)Mnm%$)('~D|{A!xwv{zyr8vXnsrkjoh.fNdchg`ed]#aC_^WVz=YXQPt7SRQPOHGkK-IHGF?>bBA#"8\6;:981Uv.32+*)Mnm%*#"F&%$#cy?}v<]\xwpun4rqSonmf,diha'eG]#a`_X|V[ZYXWPt76LKoIHGLEiCHGFED=aA:?>7[;:981w/4-,PO)o'&J*j(!E%edz@~}_u;yxqpo5mrqpoh.f,jibgf_%]\[!_XW{[ZYXQu87SLKo2NGFjJIHAF?c=BA@?>=<5Y38765.-Q10)o'&J*j(!E%e{z@~}|{ts9qpotsrk1oQglkd*)gIed]#DZ_^]VzZYRQuONMRKJnNGLEJCgG)(D=aA:?>=<;4X816/43,P0).-&+$H('gf|Bcb~w|u;yxwYutmrqj0nmleMib(fH%cba`_X|VUZYXWPt7SRQPOHGkEDIHG@dDC<;@?8\6|:32V0T43,+O)o'&J*)('&}C{"yxwv<tyr8vun4Ukpoh.fN+c)gIed]#DZ_^]VzTSRWPtTSLQJnH0LKJIBAe(>=BA@987[;:381Uv.32+*)Mnm%$)('~D${"y?}_uzyxqpo5srqSonmf,jihgfeG]#a`_X|V[ZYXWPt76LKo2NGFjJIH*)ED=a;@?>76;4X816/43,P*).',%I)('~Ded"y~}|u;srqvo5mlqpih.fN+cba`&d]\aZ~^]VUZSwWPUTSLpJ2NGLEiCHGFED=a;:?>7<5YX876v43,+O).-,+$H('&feBz!x}v{zsr8punsrk1inglkdihg`&d]\"Z~X]V[ZSwQVUTMRKo2NGFjDIHGF?>b%A@?87[;{921U5.3210)M-,%k#(!EfeB"y~}v{zyr8%

Probieren Sie es online aus!

Krzysztof Szewczyk
quelle
0

TI-83/84 BASIC, 124 Bytes

For(A,1,E4
DelVar Nint(log(A→P
Ans→Q
While Ans
For(I,0,Q-Ans
10^(P+1
AnsfPart(iPart(A/10^I)/Ans→S
min(Ans={2,3,5
If S≥7 and fPart(.5S
min(remainder(S,3+2cumSum(not(binompdf(int(.5√(S)),0
N+not(Ans→N
End
P-1→P
End
If not(N
Disp A
End

Schleifen über die ersten 10k-Ganzzahlen. Richtet einen Zähler in N ein, um jede Teilstring-Primzahl und int (log (A) zu überprüfen) Teilzeichenfolge mindestens 2-stellig. 10 ^ ... und AnsfPart (iPart (,,, generieren die aktuelle Teilzeichenfolge, um die Primalität zu überprüfen). In den folgenden 3 Zeilen wird die Primalitätsprüfung in Ans auf 1 oder 0 gesetzt. Wenn die Teilzeichenfolge keine Primzahl ist Wir erhöhen N und nachdem alle Teilzeichenfolgen überprüft wurden, ob N noch 0 ist, drucken wir die aktuelle Zahl.

Möglicherweise könnte eine Optimierung vorgenommen werden, um die Effizienz der Primalitätsprüfung für diesen Test zu erhöhen. Ich bin nur froh, dass ich einen Algorithmus in weniger Bytes gefunden habe, als die Ausgabe direkt in der TI-83-Formatierung zu speichern!

TiKevin83
quelle
0

PHP , 135 Bytes

for(;++$n<1e4;$p||print"$n
")for($p=$i=0;$i<$l=strlen($n);$i++)for($j=1;$j++<$l-$i;$p|=$k)for($k=($m=substr($n,$i,$j))-1;$k&&$m%$k--;);

Probieren Sie es online aus!

for(;                         // level 1 loop on
  ++$n<1e4;                   // all numbers from 1 to 10,000, $n is current number
  $p||print"$n\n"             // at the end of loop for each number, print $n if all multi digit sub strings were prime ($p=0)
)
  for(                        // level 2 loop on each digit of $n
    $p=                       // $p is a flag for all sub string primes and is set to 0 for each new $n
      $i=0;                   // $i is position of current digit (and sub string start position)
    $i<$l=strlen($n);         // $l is the total digits count in $n
    $i++                      // increment $i by one
  )
    for(                      // level 3 loop to create sub strings
      $j=1;                   // $j is length of sub string, we only care about multi digit sub strings so it starts from 1
      $j++<$l-$i;             // continue the loop as long as $j has not reached last digit and increment it by one
      $p|=$k                  // THIS IS RUN AFTER LOOP LEVEL 4: update $p flag based on value of $k
                              //     $p will be left at 0 only if all of the sub strings are prime (if $k is always 0)
    )
      for(                    // level 4 loop to check each sub string to be prime
        $k=(                  // $k is set to current sub string minus 1
          $m=substr($n,$i,$j) // $m is current sub string
        )-1;                  // 
        $k && $m%$k--;        // as long as $k is more than 0 and $m%$k is not zero, decrement $k by one and continue
                              //     a prime number will only get a 0 remainder, when $k gets to 1
                              //     so $k will be 0 for primes and more than 0 for non-primes
      );
Nacht2
quelle