Распечатать / Вывести все положительные числа, в которых каждая многозначная подстрока в ее десятичном представлении также является простой.


15

задача

Ваша задача - напечатать или вывести все положительные числа, в которых каждая многозначная подстрока в ее десятичном представлении также проста. Если номер имеет хотя бы 2 цифры, это будет означать, что сам номер также должен быть простым.

пример

  • 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, который отправит наименьший ответ на этот вызов в Brachylog ( ссылка вики ) ( ссылка TIO ) ( чат ).
Утренняя монахиня

2
Плохо @Fatalize. Это то, что вы получаете за создание языка
Луис Мендо

3
У меня есть ответ 50 байтов :(
Fatalize

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

Brachylog , 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 байт

Другое решение брахилога. Я не мог получить его короче, чем решение Erik The Outgolfer's Brachylog; это точно такая же длина, но приближается к поколению с противоположного направления.

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

Похоже, что Unrelated String победил многих персонажей, которых я поздравляю.

Объяснение:

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

Попробуйте онлайн

Объяснение:

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

Порт gastropner «п.к. (НКА) ответ , поэтому убедитесь , что 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до ) и извлекает числа с помощью селектора ( ). Предложение состоит из двух компонентов: первый цикл переходит к текущему номеру и используется для извлечения тех чисел, которые образуют подстроку текущего номера (через оператор регулярного выражения). Мы храним эти подстроки в . Вторая часть проходит по циклу и использует для извлечения всех простых чисел, используя простое регулярное выражение . Затем мы берем оба, и на самом деле проверяем, являются ли они ual. Например, будет иметь и каждый из них является основным, так что будет и, таким образом, будет выбран.1e410000Where-Object|?{...}11Where-Object-match$x$xWhere-Object.count-eq971$x = (71,97,971)3-eq3$TRUE971

Этот результат объединяется в массив с диапазоном 1..10. Полученный массив остается в конвейере, и вывод неявный, с новой строкой между элементами по умолчанию.



2

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

-2 спасибо Кевину Круйссену. -2 благодаря потолку

... И, вдохновленный этим, мы можем получить еще 2 байта из цикла for.

Также беззастенчиво назвал довольно лучшего главного контролера из ответа Кевина Круйссена для другого -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 байтов.
Кевин Круйссен,

@KevinCruijssen Приветствия!
Гастропнер

2

Malbolge Unshackled (вариант с 20-кратным вращением), 2,5254e7 байт или 1,9809e7 байт

Размер этого ответа превышает максимально допустимый размер программы (eh), поэтому код находится в моем репозитории GitHub (примечание: не копируйте код, используя CTRL + A и CTRL + C, просто щелкните правой кнопкой мыши и нажмите «Сохранить элемент назначения как». .. ").

Как запустить это?

Это может быть непростой задачей, потому что наивному интерпретатору Haskell понадобятся годы, чтобы запустить это. У 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 минут на моей машине, производя шестнадцатеричные числа последовательности. Я остановил его около часа вычислений, и он закончился в 0x11.

Обратите внимание, что этот ответ отличается от моего другого, потому что этот фактически вычисляет числа, и его можно сделать так, чтобы он вычислял их бесконечно.

Приложение выделяет дополнительный буфер, размер которого составляет около 7 гигабайт, поэтому лучше подготовьте свою свободную оперативную память.

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

Альтернативный вариант использует около 2 гигабайт памяти меньше, но выводит его в виде символов ASCII (0 = ASCII (0x0), 10 = перевод строки и т. Д.) И доступен здесь . Это не конкурирует, хотя, из-за требований вызова


Код гольф - это дать краткие ответы.
Alfe

2
@Alfe Malbolge - это язык, который был разработан так, чтобы его было чрезвычайно сложно программировать (ссылка на Википедию) ; тот факт, что это даже возможно, впечатляет.
Джузеппе

4
Таким образом, по сути, это является коротким ответом. Просто стандарты смещены. Слегка.
Alfe

3
@ Не стесняйся попробовать сбрить несколько байтов! ;-)
Джузеппе

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

Это компилируется в 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

Swift 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

Зацикливается на первые 10 тысяч целых чисел. Устанавливает счетчик в N, чтобы проверить каждую простую подстроку, и int (log (A извлекает на единицу меньше, чем число цифр в текущем номере. Затем мы отложим это число во второй переменной, чтобы мы могли уменьшить P на каждую длину). подстрока не менее 2 цифр. 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.