Wydrukuj / wydrukuj wszystkie liczby dodatnie, w których każdy wielocyfrowy podciąg w postaci dziesiętnej jest również liczbą pierwszą.

15

Zadanie

Twoim zadaniem jest wydrukowanie lub wydrukowanie wszystkich liczb dodatnich, w których każdy wielocyfrowy podciąg w postaci dziesiętnej jest również liczbą pierwszą. Jeśli liczba ma co najmniej 2 cyfry, oznacza to, że sama liczba również musi być liczbą pierwszą.

Przykład

  • 6197w sekwencji, ponieważ każdy wielocyfrowy podciąg 6197jest pierwsza, a mianowicie: 61, 19, 97, 619, 197, 6197(sam).
  • Zauważ, że 6nie jest liczbą pierwszą, ale 6197wciąż znajduje się w sekwencji, ponieważ 6nie jest wielocyfrowym podciągiem 6197.
  • 8jest również w sekwencji, ponieważ każde wielocyfrowe podłańcuch 8jest liczbą pierwszą. Nie ma wielocyfrowego podciągu 8, więc jest to przypadek pustej prawdy .

Okular

  • Obowiązują standardowe luki , z wyjątkiem tego, że wolno zakodować dane wyjściowe lub przechowywać informacje związane z danymi wyjściowymi w programie.
  • Liczby na wyjściu mogą być w dowolnej kolejności .
  • Liczby na wyjściu mogą mieć duplikaty.
  • Możesz użyć dowolnego separatora , jeśli wybierzesz drukowanie zamiast wydruku.
  • Jesteś dozwolony prefiks i / lub wyjście postfix jeśli zdecydujesz się wydrukować zamiast wyjścia.
  • Separator, prefiks i postfiks nie mogą zawierać żadnych cyfr (od U ​​+ 0030 do U + 0039).

Pełna lista (58 pozycji)

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

Odniesienie


Jak zawsze, prosimy o komentarze w komentarzach, które powinienem wyjaśnić.

Leaky Nun
źródło
2
Daję +300 nagród każdemu oprócz @Fatalize, który udzieli najmniejszej odpowiedzi na to wyzwanie w Brachylog ( link wiki ) ( link TIO ) ( czat ).
Leaky Nun
2
Słaba @ Fatalizacja. Właśnie to dostajesz za stworzenie języka
Luis Mendo
3
Mam odpowiedź 50 bajtów :(
Fatalize
1
Czy program musi zostać zakończony?
Fatalize
2
@LeakyNun Wygląda na to, że ktoś dostanie tę nagrodę!
Jordan

Odpowiedzi:

7

05AB1E , 15 13 bajtów

Kod:

4°GN§ŒD9›ÏpP–

Wyjaśnienie:

  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

Wykorzystuje kodowanie CP-1252 . Wypróbuj online! (może to potrwać kilka sekund).

Adnan
źródło
5

Brachylog , 18 17 15 16 15 bajtów

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

Wypróbuj online!

-1 bajt po dyskusji z Fatalize zainspirował mnie do zobaczenia, co się stanie, jeśli zamienię te li inne <.

Predykat generuje dane wyjściowe poprzez zmienną wejściową, o ile zmienna wyjściowa nie jest ograniczona. Ponieważ dozwolone są duplikaty, każda liczba jest generowana z wielokrotnością równą 2 do liczby cyfr, które są liczbami pierwszymi.

ℕ₁                 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.

Starsza wersja:

{≜ℕsᶠ{Ḋ!|ṗ}ᵐ&}ᶠ⁵⁹b
7^₅⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
∧8ḟ>?ℕ₁≜sᶠ{Ḋ|ṗ}ᵐ
Niepowiązany ciąg
źródło
Jest to 16 bajtów, ale nieprzetestowane, ponieważ sprawdzanie wszystkiego do 40320 nie jest dokładnie szybkie:8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
Niepowiązany ciąg
Zamiast tego kończy się dobrze, biorąc pod uwagę górną granicę 10000: tio.run
Niepowiązany ciąg
4

Brachylog , 18 bajtów

Kolejne rozwiązanie Brachylog. Nie mogłem być krótszy niż roztwór Brachylog Erika The Outgolfer; ma dokładnie taką samą długość, ale zbliża się do generacji z przeciwnego kierunku.

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

Wygląda na to, że Niepowiązany Sznurek pobił to przez wiele postaci, którym gratuluję.

Wyjaśnienie:

{≜ℕ                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

Wypróbuj online!

IFcoltransG
źródło
3

Galaretka , 17 bajtów

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

Moja pierwsza galaretka odpowiedź! Zaoszczędź 3 bajty dzięki @Leaky Nun !

Wypróbuj online

Wyjaśnienie:

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
źródło
Gratulujemy pierwszej odpowiedzi na galaretkę!
Leaky Nun
2
RÇÐfmożna zastąpić Ç€T. ṖÐfḌÆP€można zastąpić ḌḟDÆP.
Dennis
3

Java 8, 182 bajty

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 C odpowiedzi gastropnera (gcc) , więc pamiętaj o jego głosowaniu!

Wypróbuj online.

Wyjaśnienie:

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

PowerShell v2 +, 107 104 bajtów

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

Ostrzeżenie: Trochę powolne

Pętle od 11do 1e4(tj. 10000) I wyciąga liczby za pomocą Where-Objectselektora ( |?{...}). Klauzula składa się z dwóch elementów - pierwszej pętli od 11bieżącej liczby i służy Where-Objectdo wyciągania tych liczb, które tworzą podłańcuch bieżącej liczby (za pośrednictwem -matchoperatora wyrażenia regularnego). Przechowujemy te podciągi w $x. Druga część zapętla się $xi używa Where-Objectdo wyciągania wszystkich liczb pierwszych za pomocą wyrażenia regularnego . Następnie bierzemy .countjedno i drugie i sprawdzamy, czy są one prawdziwe -eq. Na przykład 971będzie miał $x = (71,97,971)i każdy z nich jest liczbą pierwszą, tak 3-eq3jest $TRUEi dlatego 971zostanie wybrany.

Ten wynik jest skonkatenowany z tablicą z zakresem 1..10. Powstała tablica pozostawia się w potoku, a dane wyjściowe są niejawne, z domyślnie nową linią między elementami.

AdmBorkBork
źródło
2

C (gcc) , 144 142 140 136 134 132 bajtów

-2 dzięki Kevin Cruijssen. -2 dzięki pułapce cat

... I zainspirowany tym, możemy uzyskać kolejne 2 bajty z pętli for.

Również bezwstydnie naciągnął raczej lepszy sprawdzian liczb pierwszych z odpowiedzi Kevina Cruijssena na kolejne -4.

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

Wypróbuj online!

gastropner
źródło
||n<10może być |n<10i for(n=1;n<1e4;n++)może być for(n=0;++n<1e4;)dla -2 bajtów.
Kevin Cruijssen
@KevinCruijssen Cheers!
gastropner
2

Malbolge Unshackled (wariant 20-tryt rotacyjny), 25254e7 bajtów lub 19809e7 bajtów

Rozmiar tej odpowiedzi przekracza maksymalny rozmiar programu do wysłania (eh), więc kod znajduje się w moim repozytorium GitHub (uwaga: nie kopiuj kodu za pomocą CTRL + A i CTRL + C, po prostu kliknij prawym przyciskiem myszy i kliknij „Zapisz element docelowy jako. .. ”).

Jak to uruchomić?

Może to być trudna część, ponieważ naiwny tłumacz Haskell będzie wieków na wieki, aby to uruchomić. TIO ma przyzwoitego interpretera Malbogle Unshackled, ale niestety nie będę mógł go używać (ograniczenia).

Najlepszy, jaki udało mi się znaleźć, to stały wariant szerokości rotacji 20-trit, który działa bardzo dobrze.

Aby nieco przyspieszyć tłumacza, usunąłem wszystkie kontrole z nieskrępowanego tłumacza Matthiasa Luttera.

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

Uwagi dotyczące wydajności

Aplikacja działała na moim komputerze około 40 minut, generując liczby HEX sekwencji. Zatrzymałem go około godziny obliczeń i zakończyłem na 0x11.

Zauważ, że ta odpowiedź różni się od mojej drugiej, ponieważ ta faktycznie oblicza liczby i można ją wykonać, aby obliczała je w nieskończoność.

Aplikacja przydziela bufor spinup, czyli około 7 gigabajtów, więc lepiej przygotuj wolną pamięć RAM.

Wariant alternatywny

Alternatywny wariant zużywa około 2 gigabajty pamięci mniej, ale generuje dane wyjściowe w postaci znaków ASCII (0 = ASCII (0x0), 10 = nowy wiersz itp.) I jest dostępny tutaj . Nie konkuruje jednak ze względu na wymagania dotyczące wyzwań

Krzysztof Szewczyk
źródło
Code golf polega na udzielaniu krótkich odpowiedzi.
Alfe
2
@Alfe Malbolge to język, który został zaprojektowany tak, aby był wyjątkowo trudny do zaprogramowania w (link wikipedia) ; fakt, że jest to nawet możliwe, jest imponujący.
Giuseppe
4
W rzeczywistości jest to krótka odpowiedź. Po prostu standardy się zmieniają. Nieco.
Alfe
3
@Afe możesz spróbować ogolić trochę bajtów! ;-)
Giuseppe
2

Python 3 , 118 bajtów

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)

Wypróbuj online!

Wyjaśnienie

Ostrzeżenie: brak rzeczywistych ciągów zaangażowanych w to rozwiązanie.

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

Rubinowy, 81 + 8 = 89 bajtów

+8 bajtów dla -rprime.

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

Zobacz na repl.it: https://repl.it/CniR/2

Jordania
źródło
1

Perl 6 ,  47 44  43 bajtów

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

Wyjaśnienie:

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

C #, 261 249 247 bajtów

Oszczędność 12 bajtów dzięki Leaky Nun

()=>{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);}}};

To kompiluje się do Func<List<int>>.

Sformatowana wersja wygląda następująco:

() =>
{
    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
źródło
Wystarczy wydrukować go bezpośrednio, bez korzystania z listy
Leaky Nun
Zamiast falselub trueużyj 0>1i0<1
Leaky Nun
Dodatkowe informacje na temat gry w golfa można znaleźć w tym miejscu .
Leaky Nun
@LeakyNun Dzięki za wskazówki, zazwyczaj lubię publikować wersję w golfa, a następnie się stąd przenieść.
TheLethalCoder
1

Szybkie 4 , 144 bajty

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

Wypróbuj online!

Wyjaśnienie

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

JavaScript (Node.js) , 130 bajtów

czy mogę założyć, nieskończony stos i*i<=n&&mogą być usunięte i i*i>nzakręty na i>=nktórych zmniejsza kodu przez 9 bajtów i może przekształcić funkcję głównego do rekurencyjne: https://tio.run/##LYpBDoIwEEX33AMyAxVbXUmccgX2xkWDRYeQaSPqyrvXkrj5ef/lze7j1vHJ8bWTcPMpTQRMWjm6XJFs0/DZ@EM/ASunBmCsKtfG9/rIiJ0rIoEoJpNbKXPdx@1jx5akGEiytqdNYp2nNFr / wR @ xHkD2Rn81dpLGIGtYfLuEO0yAmH4 (119 bajtów)

_=>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

Wypróbuj online!

DanielIndie
źródło
1

Malbolge , 1361 bajtów

Prosta i nudna wersja. Wyświetla liczby od najwyższej.

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%

Wypróbuj online!

Krzysztof Szewczyk
źródło
0

TI-83/84 BASIC, 124 bajty

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

Pętle powyżej pierwszych 10 000 liczb całkowitych. Ustawia licznik w N, aby sprawdzać każdą liczbę pierwszą podłańcucha, i int (log (A pobiera o jedną liczbę mniejszą niż liczba cyfr w bieżącej liczbie. Następnie odkładamy tę liczbę w drugiej zmiennej, abyśmy mogli przesunąć P w dół przez każdą długość podłańcuch co najmniej 2 cyfry. 10 ^ ... i AnsfPart (iPart (,,, generuje bieżący podłańcuch w celu sprawdzenia pierwotności, następnie następujące 3 linie sprawdzają pierwotność na 1 lub 0 w Ans. Jeśli podłańcuch nie jest liczbą pierwszą) , zwiększamy N, a po sprawdzeniu wszystkich podciągów, jeśli N wciąż wynosi 0, wypisujemy bieżącą liczbę.

Być może można by wprowadzić pewne poprawki, aby zwiększyć skuteczność kontroli pierwotności w tym teście? Cieszę się, że znalazłem algorytm w mniejszej liczbie bajtów niż zapisywanie danych wyjściowych bezpośrednio w formacie TI-83!

TiKevin83
źródło
0

Python 3.8 (wersja wstępna) , 194 bajty

r=range
s=str
l=lambda _:len(s(_))
[*map(print,[t for t in r(1,10**4) if all(all(int(x)%b for b in r(2,int(x))) for x in [s(t)[i:j+1] for i in r(l(t)) for j in r(i,l(t)) if l(s(t)[i:j+1])>1])])]

Wypróbuj online!

jaaq
źródło
0

PHP , 135 bajtów

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

Wypróbuj online!

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
      );
Noc 2
źródło