In / Xuất tất cả các số dương trong đó mọi chuỗi con nhiều chữ số trong biểu diễn thập phân của nó cũng là số nguyên tố.


15

Bài tập

Nhiệm vụ của bạn là in hoặc xuất tất cả các số dương trong đó mọi chuỗi con nhiều chữ số trong biểu diễn thập phân của nó cũng là số nguyên tố. Nếu số có ít nhất 2 chữ số, điều này có nghĩa là chính số đó cũng cần phải là số nguyên tố.

Thí dụ

  • 6197là trong chuỗi vì mỗi đa chữ số substring trong 6197là số nguyên tố, đó là: 61, 19, 97, 619, 197, 6197(chính nó).
  • Lưu ý rằng đó 6không phải là số nguyên tố nhưng 6197vẫn nằm trong chuỗi vì 6không phải là chuỗi con nhiều chữ số của 6197.
  • 8cũng nằm trong chuỗi vì mọi chuỗi con có nhiều chữ số 8là số nguyên tố. Không có chuỗi con nhiều chữ số trong 8, vì vậy đây là một trường hợp của sự thật bỏ trống .

Thông số kỹ thuật

  • Các lỗ hổng tiêu chuẩn được áp dụng, ngoại trừ việc bạn được phép mã hóa đầu ra hoặc lưu trữ thông tin liên quan đến đầu ra trong chương trình của bạn.
  • Các số trong đầu ra có thể theo thứ tự bất kỳ .
  • Các số trong đầu ra được phép có trùng lặp.
  • Bạn có thể sử dụng bất kỳ dấu phân cách nào , nếu bạn chọn in thay vì đầu ra.
  • Bạn được phép xuất tiền tố và / hoặc đầu ra hậu tố nếu bạn chọn in thay vì đầu ra.
  • Dấu phân cách và tiền tố và hậu tố có thể không chứa bất kỳ chữ số nào (U + 0030 đến U + 0039).

Danh sách đầy đủ (58 bài)

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

Tài liệu tham khảo


Như mọi khi, xin vui lòng giải quyết trong các ý kiến ​​bất cứ điều gì tôi nên làm rõ.


2
Tôi sẽ cung cấp +300 tiền thưởng cho bất kỳ ai ngoại trừ @Firthize, người gửi câu trả lời nhỏ nhất cho thử thách này trong Brachylog ( liên kết wiki ) ( liên kết TIO ) ( phòng chat ).
Leaky Nun

2
Kém @Firthize. Đó là những gì bạn nhận được khi tạo ngôn ngữ
Luis Mendo 16/8/2016

3
Tôi có câu trả lời 50 byte :(
Fatalize 17/8/2016

1
Chương trình phải chấm dứt?
Gây tử vong vào

2
@LeakyNun Hình như ai đó sẽ nhận được tiền thưởng đó!
Jordan

Câu trả lời:



7

05AB1E , 15 13 byte

Mã số:

4°GN§ŒD9›ÏpP–

Giải trình:

  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

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến! (có thể mất vài giây).


5

Brachylog , 18 17 15 16 15 byte

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

Hãy thử trực tuyến!

-1 byte sau một cuộc thảo luận với Fatalize đã truyền cảm hứng cho tôi để xem điều gì sẽ xảy ra nếu tôi trao đổi l<xung quanh.

Vị từ này tạo ra đầu ra thông qua biến đầu vào, miễn là biến đầu ra không bị giới hạn. Vì các bản sao được cho phép, mỗi số được tạo với bội số bằng 2 với lũy thừa của số chữ số là số nguyên tố.

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

Các phiên bản cũ hơn:

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

Đây là 16 byte, nhưng chưa được kiểm tra, vì kiểm tra mọi thứ lên đến 40320 không chính xác nhanh:8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
Chuỗi không liên quan

Tuy nhiên, nó chấm dứt tiền phạt với giới hạn trên 10000 thay vào đó: tio.run/##SypKTM6ozMlPN/r/39AACB7NX/ Lỗi
Chuỗi không liên quan

4

Brachylog , 18 byte

Một giải pháp Brachylog khác. Tôi không thể có được nó ngắn hơn Erik Giải pháp Brachylog của Outgolfer; nó có cùng độ dài, nhưng tiếp cận thế hệ từ hướng ngược lại.

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

Có vẻ như Chuỗi không liên quan đã đánh bại điều này bởi nhiều nhân vật, người mà tôi chúc mừng.

Giải trình:

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

Hãy thử trực tuyến!


3

Thạch , 17 byte

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

Câu trả lời Jelly đầu tiên của tôi! Đã lưu 3 byte nhờ @Leaky Nun !

Dùng thử trực tuyến

Giải trình:

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.

Chúc mừng câu trả lời Jelly đầu tiên của bạn!
Nữ tu rò rỉ

2
RÇÐfcó thể được thay thế bằng Ç€T. ṖÐfḌÆP€có thể được thay thế bằng ḌḟDÆP.
Dennis

3

Java 8, 182 byte

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ổng câu trả lời C (gcc) của gastropner , vì vậy hãy chắc chắn để nâng cao câu trả lời của anh ấy!

Hãy thử trực tuyến.

Giải trình:

// 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 byte

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

Cảnh báo: Kinda chậm

Vòng lặp từ 11đến 1e4(nghĩa là 10000) và lấy ra các số bằng cách sử dụng Where-Objectbộ chọn ( |?{...}). Mệnh đề là hai thành phần - các vòng lặp đầu tiên từ 11tối đa đến số hiện tại và sử dụng Where-Objectđể kéo ra các số đó tạo thành một chuỗi con của số hiện tại (thông qua -matchtoán tử regex). Chúng tôi lưu trữ những chất nền trong $x. Phần thứ hai lặp lại $xvà sử dụng Where-Objectđể rút ra tất cả các số nguyên tố bằng cách sử dụng biểu thức chính . Sau đó chúng tôi lấy .countcả hai và kiểm tra thực sự là liệu đó có phải là -equal không. Ví dụ, 971sẽ có $x = (71,97,971)và mỗi người trong số đó là những thủ, vì vậy 3-eq3$TRUEvà do đó 971sẽ được chọn.

Kết quả đó là mảng được nối với một phạm vi 1..10. Mảng kết quả được để lại trên đường ống và đầu ra là ẩn, với một dòng mới giữa các thành phần theo mặc định.



2

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

-2 nhờ Kevin Cruijssen. -2 nhờ trần

... Và lấy cảm hứng từ đó, chúng ta có thể nhận thêm 2 byte từ vòng lặp đó.

Cũng xấu hổ đặt biệt danh cho người kiểm tra chính tốt hơn từ câu trả lời của Kevin Cruijssen cho -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);}

Hãy thử trực tuyến!


||n<10có thể |n<10for(n=1;n<1e4;n++)có thể for(n=0;++n<1e4;)cho -2 byte.
Kevin Cruijssen

@KevinCruijssen Chúc mừng!
dạ dày

2

Malbolge Unshackled (biến thể xoay 20 trit), 2.5254e7 byte hoặc 1.9809e7 byte

Kích thước của câu trả lời này vượt quá kích thước chương trình có thể đăng tối đa (eh), do đó mã được đặt trong kho GitHub của tôi (lưu ý: Không sao chép mã bằng CTRL + A và CTRL + C, chỉ cần nhấp chuột phải và nhấp vào "Lưu phần tử đích dưới dạng. .. ").

Làm thế nào để chạy này?

Đây có thể là một phần khó khăn, bởi vì thông dịch viên Haskell ngây thơ sẽ mất nhiều thời gian để điều hành nó. TIO có trình thông dịch Malbogle Unshackled đàng hoàng, nhưng thật đáng buồn là tôi sẽ không thể sử dụng nó (giới hạn).

Cái tốt nhất tôi có thể tìm thấy là biến thể chiều rộng xoay cố định 20 trit, hoạt động rất tốt.

Để làm cho trình thông dịch nhanh hơn một chút, tôi đã xóa tất cả các kiểm tra khỏi trình thông dịch Malbolge Unshackled của Matthias Lutter.

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

Ghi chú hiệu suất

Ứng dụng chạy khoảng 40 phút trên máy của tôi, tạo ra số HEX của chuỗi. Tôi đã dừng nó khoảng một giờ tính toán, và nó đã hoàn thành vào 0x11.

Lưu ý câu trả lời này khác với câu trả lời khác của tôi, bởi vì câu trả lời này thực sự tính toán các con số và nó có thể được thực hiện để nó tính toán chúng vô thời hạn.

Ứng dụng phân bổ bộ đệm spinup, có dung lượng lớn khoảng 7 gigabyte, vì vậy tốt hơn hãy chuẩn bị RAM miễn phí.

Biến thể thay thế

Biến thể thay thế sử dụng ít hơn khoảng 2 gigabyte bộ nhớ, nhưng tạo ra đầu ra dưới dạng các ký tự ASCII (0 = ASCII (0x0), 10 = newline, v.v ...), và có sẵn ở đây . Mặc dù vậy, nó không cạnh tranh, do yêu cầu thách thức


Code golf là về việc đưa ra câu trả lời ngắn.
Alfe

2
@Alfe Malbolge là một ngôn ngữ được thiết kế cực kỳ khó lập trình (liên kết wikipedia) ; thực tế là điều này thậm chí có thể là khá ấn tượng.
Giuseppe

4
Vì vậy, trên thực tế, đây một câu trả lời ngắn. Chỉ cần các tiêu chuẩn được thay đổi. Nhẹ nhàng.
Alfe

3
@Alfe bạn được chào đón để thử tắt một số byte! ;-)
Giuseppe

2

Python 3 , 118 byte

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)

Hãy thử trực tuyến!

Giải trình

Cảnh báo: không có chuỗi thực tế liên quan đến giải pháp này.

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

Ruby, 81 + 8 = 89 byte

+8 byte cho -rprime.

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

Xem nó trên repl.it: https://repl.it/CniR/2


1

Perl 6 ,  47 44  43 byte

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

Giải trình:

# 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 byte

Đã lưu 12 byte nhờ 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);}}};

Điều này biên dịch thành a Func<List<int>>.

Phiên bản được định dạng trông như sau:

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

Chỉ cần in trực tiếp mà không cần sử dụng danh sách
Leaky Nun

Thay vì falsehoặc true, sử dụng 0>10<1
Leaky Nun

Bạn có thể tham khảo điều này để biết thêm mẹo chơi golf.
Leaky Nun

@LeakyNun Cảm ơn những lời khuyên, tôi thường thích nhận được một phiên bản golf được đăng sau đó chuyển từ đó.
TheLethalCoder

1

Swift 4 , 144 byte

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

Hãy thử trực tuyến!

Giải trình

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 byte

nếu tôi có thể giả định chồng vô hạn i*i<=n&&có thể được loại bỏ và i*i>nthay phiên nhau để i>=nlàm giảm mã 9 byte và có thể chuyển đổi chức năng chính để đệ quy: 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

Hãy thử trực tuyến!


1

Malbolge , 1361 byte

Phiên bản đơn giản và nhàm chán. Hiển thị số từ cao nhất.

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%

Hãy thử trực tuyến!


0

TI-83/84 CƠ BẢN, 124 byte

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

Vòng lặp trên số nguyên 10k đầu tiên. Thiết lập bộ đếm trong N để kiểm tra từng số nguyên tố của chuỗi con và int (log (A lấy một số nhỏ hơn số chữ số trong số hiện tại. Sau đó, chúng tôi đặt số đó sang một biến thứ hai để chúng tôi có thể bước xuống P qua từng độ dài chuỗi con ít nhất 2 chữ số. 10 ^ ... và AnsfPart (iPart (,,, tạo chuỗi con hiện tại để kiểm tra tính nguyên thủy, sau đó 3 dòng sau thực hiện kiểm tra tính nguyên thủy thành 1 hoặc 0 trong Ans. Nếu chuỗi con không phải là số nguyên tố , chúng tôi tăng N và sau khi tất cả các chuỗi con được kiểm tra nếu N vẫn bằng 0, chúng tôi sẽ in số hiện tại.

Có thể một số điều chỉnh có thể được thực hiện để tăng hiệu quả của kiểm tra tính nguyên thủy đối với thử nghiệm này? Tôi rất vui vì tôi đã tìm thấy một thuật toán có ít byte hơn là lưu trữ đầu ra trực tiếp ở định dạng TI-83!



0

PHP , 135 byte

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

Hãy thử trực tuyến!

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
      );
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.