Роздрукуйте / виведіть усі додатні числа, в яких кожна багатоцифрова підрядка в її десятковому поданні також є основним.


15

Завдання

Ваше завдання - друкувати або виводити всі додатні числа, в яких кожна багатоцифрова підрядка в її десятковому поданні також є основним. Якщо число має принаймні дві цифри, це означає, що саме число також має бути простим.

Приклад

  • 6197в послідовності , тому що кожен багаторозрядні подстрока в 6197простому, а саме: 61, 19, 97, 619, 197, 6197(сам).
  • Зауважте, що 6це не є простим, але 6197все ще є в послідовності, оскільки 6не є багатоцифровою підрядкою 6197.
  • 8також в послідовності, тому що кожна багатоцифрова підрядка в 8- просте. Немає багатоцифрової підрядки 8, тому це справді випадкова істина .

Технічні характеристики

  • Застосовуються стандартні лазівки , за винятком того, що вам дозволено жорсткий код виводу або зберігання інформації, що стосується виводу у вашій програмі.
  • Цифри на виході можуть бути в будь-якому порядку .
  • Цифри на виході дозволяють мати дублікати.
  • Ви можете використовувати будь-який роздільник , якщо ви вирішите друкувати замість виводу.
  • Ви дозволили префікс і / або вихід постфікса , якщо ви хочете надрукувати замість виведення.
  • Розділювач, префікс і постфікс можуть не містити жодних цифр (U + 0030 до U + 0039).

Повний список (58 позицій)

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

Довідково


Як завжди, будь ласка, звертайтесь у коментарях до всього, що мені слід уточнити.


2
Я дам +300 нагороди будь-кому, крім @Fatalize, хто подає найменшу відповідь на цей виклик у Брахілозі ( посилання на wiki ) ( посилання TIO ) ( чат ).
Leaky Nun

2
Погано @Fatalize. Ось що ви отримуєте за створення мови
Луїс Мендо

3
У мене є відповідь на 50 байт :(
Підписано

1
Повинно припинити програму?
Фаталізувати

2
@LeakyNun Схоже, хтось отримає цю нагороду!
Йорданія

Відповіді:



7

05AB1E , 15 13 байт

Код:

4°GN§ŒD9›ÏpP–

Пояснення:

  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

Використовує кодування CP-1252 . Спробуйте в Інтернеті! (це може зайняти кілька секунд).


5

Брахілог , 18 17 15 16 15 байт

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

Спробуйте в Інтернеті!

-1 байт після дискусії з Fatalize надихнув мене просто побачити, що станеться, якщо я поміняю місцями lі <навколо.

Цей предикат генерує вихід через вхідну змінну, до тих пір, поки вихідна змінна не буде обмежена. Оскільки дублікати дозволені, кожне число генерується з кратністю, що дорівнює 2 потужності числа його цифр, які є простими числами.

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

Старіші версії:

{≜ℕsᶠ{Ḋ!|ṗ}ᵐ&}ᶠ⁵⁹b
7^₅⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
∧8ḟ>?ℕ₁≜sᶠ{Ḋ|ṗ}ᵐ

Це 16 байт, але не перевірено, тому що перевірити все до 40320 не дуже швидко:8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
Непов'язаний рядок

Замість цього він закінчується штрафом з урахуванням верхньої межі 10000, хоча: tio.run/##SypKTM6ozMlPN/r/39AACB7NX/…
рядок

4

Брахілог , 18 байт

Ще одне рішення Брахілога. Я не міг зробити його коротшим, ніж Брахілогічне рішення Еріка Пергольфера; це точно така ж довжина, але підходить до покоління з протилежного напрямку.

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

Схоже, Непов’язана струна перемогла це багатьма персонажами, яких я вітаю.

Пояснення:

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

Спробуйте в Інтернеті!


3

Желе , 17 байт

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

Моя перша відповідь желе! Збережено 3 байти завдяки монахині @Leaky !

Спробуйте в Інтернеті

Пояснення:

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.

Вітаємо вас з першою відповіддю на желе!
Лина монахиня

2
RÇÐfможна замінити на Ç€T. ṖÐfḌÆP€можна замінити на ḌḟDÆP.
Денніс

3

Java 8, 182 байти

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

Порт відповіді гастропнера на C (gcc) , тому переконайтеся , що upvote своєї відповіді!

Спробуйте в Інтернеті.

Пояснення:

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

2

PowerShell v2 +, 107 104 байт

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

Попередження: Kinda Slow

Цикли від 11до 1e4(тобто 10000) і витягує числа за допомогою Where-Objectселектора ( |?{...}). Стаття складається з двох компонентів - перших циклів від 11до поточного числа і використовує Where-Objectдля витягування тих чисел, які утворюють підрядку поточного числа (через -matchоператор регулярних виразів). Ми зберігаємо ці підрядки в $x. Друга частина проходить цикл $xі використовує, Where-Objectщоб витягнути всі прайми, використовуючи простий регулярний вираз . Тоді ми беремо .countобидва і перевіряємо, чи справді це -eqнереально. Наприклад, 971буде, $x = (71,97,971)і кожен із них є простим, таким 3-eq3є $TRUEі таким чином 971буде обраний.

Цей результат об'єднаний у масив із діапазоном 1..10. Отриманий масив залишається на конвеєрі, а висновок неявний, з новою лінією між елементами за замовчуванням.



2

C (gcc) , 144 142 140 136 134 132 байт

-2 завдяки Кевіну Крейсейну. -2 завдяки стельовій кішці

... І надихнувшись цим, ми можемо отримати ще два байти з цього циклу.

Також безсоромно порізали набагато краще просту перевірку від Кевіна Cruijssen в відповідь на інші -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);}

Спробуйте в Інтернеті!


||n<10може бути |n<10і for(n=1;n<1e4;n++)може бути for(n=0;++n<1e4;)для -2 байт.
Kevin Cruijssen

@KevinCruijssen Привіт!
гастропнер

2

Malbolge Unshackled (варіант обертання на 20 тріт), 2,5254e7 байт або 1,9809e7 байт

Розмір цієї відповіді перевищує максимальний розмір програми, що висилається (е), тому код знаходиться у моєму сховищі GitHub (зверніть увагу: не копіюйте код за допомогою CTRL + A та CTRL + C, просто клацніть правою кнопкою миші та натисніть «Зберегти елемент призначення як. .. ").

Як це запустити?

Це може бути складним, тому що наївний перекладач Хаскелла віками буде віком для цього. TIO має пристойного перекладача Malbogle Unshackled, але, на жаль, я не зможу ним користуватися (обмеження).

Найкраще, що я міг знайти, - це фіксований варіант ширини обертання на 20 тріт, який працює дуже добре.

Щоб зробити перекладача трохи швидшим, я видалив усі чеки з неперевершеного перекладача Мальтіаса Лютера.

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

Примітки щодо виконання

Програма працювала на моїй машині близько 40 хвилин, створюючи HEX номери послідовності. Я зупинив це близько години розрахунків, і він закінчився на 0x11.

Зауважте, ця відповідь відрізняється від моєї іншої, оскільки ця фактично обчислює числа, і її можна зробити так, що вона обчислює їх нескінченно.

Додаток виділяє буфер обтікання, тобто близько 7 гігабайт, тому краще підготуйте свою безкоштовну оперативну пам’ять.

Альтернативний варіант

Альтернативний варіант використовує близько 2 гігабайт пам’яті менше, але створює вихід у вигляді символів ASCII (0 = ASCII (0x0), 10 = новий рядок тощо) і доступний тут . Однак він не конкурує через вимоги, пов'язані з викликом


Код гольфу - це дати короткі відповіді.
Альфа

2
@Alfe Malbolge - мова, розроблена як надзвичайно складна для програмування (посилання wikipedia) ; той факт, що це можливо навіть , досить вражає.
Джузеппе

4
Таким чином, по суті, це є короткою відповіддю. Просто стандарти зміщені. Трохи.
Альфа

3
@Alfe ви можете спробувати поголити деякі байти! ;-)
Джузеппе

2

Python 3 , 118 байт

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)

Спробуйте в Інтернеті!

Пояснення

Попередження: у цьому рішенні не задіяні фактичні рядки.

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


1

Perl 6 ,  47 44  43 байт

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

Пояснення:

# 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

1

C #, 261 249 247 байт

Збережено 12 байт завдяки 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);}}};

Це компілюється в a Func<List<int>>.

Відформатована версія виглядає так:

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

Просто надрукуйте його безпосередньо, не використовуючи список
Leaky Nun

Замість falseабо true, використовуйте 0>1та0<1
Leaky Nun

Ви можете звернутися до цього, щоб отримати додаткові поради щодо гольфу.
Лина монашка

@LeakyNun Дякую за поради, як правило, мені подобається розміщувати якусь версію для гольфу, а потім переходити звідти.
TheLethalCoder

1

Швидкий 4 , 144 байти

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

Спробуйте в Інтернеті!

Пояснення

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

1

JavaScript (Node.js) , 130 байт

якщо я можу припустити нескінченний стек i*i<=n&&може бути вилучений і i*i>nповороти на i>=nщо зменшує код на 9 байт та , можливо , перетворити основну функцію рекурсивний: https://tio.run/##LYpBDoIwEEX33AMyAxVbXUmccgX2xkWDRYeQaSPqyrvXkrj5ef/lze7j1vHJ8bWTcPMpTQRMWjm6XJFs0/DZ@EM/ASunBmCsKtfG9/rIiJ0rIoEoJpNbKXPdx@1jx5akGEiytqdNYp2nNFr / wR @ xHkD2Rn81dpLGIGtYfLuEO0yAmH4 (119 байт)

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

Спробуйте в Інтернеті!


1

Malbolge , 1361 байт

Проста і нудна версія. Відображає числа від найвищих.

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%

Спробуйте в Інтернеті!


0

TI-83/84 BASIC, 124 байт

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

Петлі над першими цілими 10k. Встановлює лічильник у N, щоб перевірити кожну проміжну підрядку та int (log (A отримує на одну меншу, ніж кількість цифр у поточному номері. Потім ми відкладаємо це число у другій змінній, щоб ми могли переходити на P через кожну довжину) підрядку, принаймні, дві цифри. 10 ^ ... та AnsfPart (iPart (,,, генеруйте поточну підрядку для перевірки первинності), то наступні 3 рядки перевіряють примітивність на рівні 1 або 0 в Ans. Якщо підрядка не є простим. , ми збільшуємо N, і після того, як всі підрядки перевіряються, чи N все ще 0, ми друкуємо поточне число.

Можливо, було б зроблено певне налаштування для підвищення ефективності перевірки первинності щодо цього тесту? Я просто радий, що знайшов алгоритм у меншій кількості байтів, ніж зберігання виводу безпосередньо у форматі TI-83!



0

PHP , 135 байт

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

Спробуйте в Інтернеті!

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
      );
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.