Số nguyên tố với số lượng lớn


11

Cho một số lượng lớn (trong cơ sở 10), chẳng hạn như 1234567891011121314151617, hãy tìm các "số nguyên tố" chính trong đó.
Một số nguyên tố phụ là một chuỗi các chữ số liên tiếp (được lấy từ đầu vào), đại diện cho một số nguyên tố (trong cơ sở 10).

  • Đầu vào : Một số (có thể là một chuỗi, một tệp hoặc bất cứ thứ gì bạn thích).
  • Đầu ra : Tất cả các mạng con nguyên tố được phân tách bằng cách nào đó (trong danh sách, tệp, chuỗi được phân tách bằng dấu phẩy ...) Nếu kết quả trống, bạn có thể thực hiện bất kỳ quy ước nào bạn muốn (chuỗi cứng, chuỗi rỗng, vô nghĩa, nhưng chương trình không nên tai nạn.
  • Ví dụ
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. đầu ra trống]

Đây là môn đánh gôn. Chương trình ngắn nhất sẽ thắng!
[sửa]: quy tắc bổ sung, chương trình phải được giải thích! Không phải ai cũng thông thạo Jelly :)


3
Chào mừng đến với PPCG!
Luis felipe De jesus Munoz


1
không được chỉ định. Làm bất cứ việc gì bạn thích.
Regis Portalez

1
Mẹo: Đó là quá sớm để chấp nhận một câu trả lời; nó có thể ngăn cản người khác đăng giải pháp.
Xù xì

2
@RegisPortalez hoan nghênh, và thử thách thú vị! Tôi đã thấy rằng tính năng "chấp nhận" không còn được sử dụng nhiều nữa trên PPCG giống như trên các trang web khác trong mạng. Chúng tôi có xu hướng coi trọng câu trả lời tốt đẹp trong bất kỳ ngôn ngữ.
ngm

Câu trả lời:


6

05AB1E (di sản) , 3 byte

Œʒp

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

Chất nền của đầu vào là số nguyên tố.


Điều đó sẽ khó thực hiện ngắn hơn :)
Regis Portalez

Ngôn ngữ phù hợp cho nhiệm vụ này
Jonathan Allan

5
@mob Điều đó phụ thuộc vào mã hóa. Trong mã hóa 05AB1E , câu trả lời này dài 3 byte.
Dennis

2
Theo đó, 34567 = 13 * 2659 là số nguyên tố, có vẻ sai: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh

2
@frosqh Đây thực sự là một lỗi của hàm p (số nguyên tố) trong bản phát hành 05AB1E mới: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA Nó đã được sửa trong kho lưu trữ. Trong khi đó, tôi đã chuyển câu trả lời của mình sang phiên bản cũ.
Kaldo

6

Perl 6 , 28 byte

{grep &is-prime,+«m:ex/.+/}

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

Các :ex( "đầy đủ") cờ để các nhà điều hành trận đấu mlàm cho nó trở lại mỗi trận đấu có thể xảy ra .+(ví dụ, mỗi chuỗi con của một hoặc nhiều nhân vật), thậm chí chồng chéo những người thân. Hyperoperator biến danh sách các Matchđối tượng đó thành các số, sau đó được lọc theo độ nguyên thủy grep &is-prime.


Ở đây tôi sẽ đi cùng{+«m:ex/(.+)<?{$0.is-prime}>/}
Brad Gilbert b2gills

@ BradGilbertb2gills Tôi cũng đã thử điều đó! Tôi hơi thất vọng vì nó dài hơn.
Sean

Cảm ơn đã giải thích - luôn hữu ích cho những con khủng long Perl 4 như tôi!
Toby Speight


5

Python 2 , 66 65 byte

P=k=1
n=input()
while~n+k:
 if`k`in`n`>0<P%k:print k
 P*=k*k;k+=1

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


Nên while k<=nhoặc, để chi phí 0 byte,while~n+k
Jonathan Allan

@Jonathan Allan cảm ơn bạn. Lúc đầu, tôi nghĩ rằng số lượng chính nó nên được loại trừ khỏi đầu ra, nhưng có vẻ như đây không phải là trường hợp.
trứng

@Jonathan ALLan Bạn có thể giải thích xin vui lòng mã từ whiletuyên bố? Tôi chưa từng thấy loại mã này trước đây. Cũng chưa thấy sử dụng `` , nó làm gì?
tarit goswami

1
@taritgoswami while stmt:sẽ chạy miễn là stmtcó giá trị được coi là sự thật của python. Số nguyên giả duy nhất trong Python là 0. Do đó mã sẽ chạy như ~n+k != 0. ~là toán tử bổ sung bitwise, và ~ntương đương với -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Như chúng ta đang tăng kbởi 1trong mọi hoạt động, k != n + 1là trong trường hợp này tương đương với k <= n.
trứng

1
@taritgoswami Và `n`giống như repr(n)trong Python 2. (không hoạt động trong Python 3).
trứng


3

Thạch ,  5  4 byte

-1 cảm ơn Kevin Cruijssen ( là bí danh cho ÆP)

ẆḌẒƇ

Liên kết đơn âm chấp nhận danh sách các chữ số * dẫn đến danh sách các số nguyên tố.

* đi bằng "một chuỗi, một tệp hoặc bất cứ thứ gì bạn thích" - để lấy một số nguyên, tiền tố mã với một D

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

Làm sao?

ẆḌẒƇ - Link: list of integers (digits)   e.g. [1,2,3,4]
Ẇ    - non-empty contiguous substrings        [[1],[2],[3],[4],[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]]
 Ḍ   - convert to decimal (vectorises)        [1,2,3,4,12,23,34,123,234,1234]
   Ƈ - filter keep if:
  Ẓ  -   is prime?                            [2,3,23]

ÆPcó thể là nếu tôi không nhầm?
Kevin Cruijssen

À đúng, đó là một trong những bí danh mới - cảm ơn!
Jonathan Allan

2

Java 8, 148 147 byte

n->{for(int l=n.length(),i=l,j;i-->0;)for(j=l;j>i;){long k=2,x=new Long(n.substring(i,j--));for(;k<x;x=x%k++<1?0:x);if(x>1)System.out.println(x);}}

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

Giải trình:

n->{                     // Method with String parameter and no return-type
  for(int l=n.length(),  //  Length of the input-String
          i=l,j;         //  Temp-integers
      i-->0;)            //  Loop `i` in the range [length, 0)
    for(j=l;j>i;){       //   Inner loop `j` in the range [length, 0)
      for(long k=2,      //    Set `k` to 2
               x=new Long(n.substring(i,j--)
                         //    Take the substring [`i`, `j`) from the input,
            );           //    convert it to a long, and set it as `x`
          k<x;           //    Inner loop as long as `k` is still smaller than `x`
        x=x%k++<1?       //     If `x` is divisible by `k`:
           0             //      Set `x` to 0
          :              //     Else:
           x);           //      Leave `x` unchanged
      if(x>1)            //    If `x` is now larger than 1 (a.k.a. If `x` is a prime):
        System.out.println(x);}}
                         //     Print `x` with a trailing newline to STDOUT

2

MATL , 9 byte

&XfXUtZp)

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

Giải trình

&Xf   % Implicit input: string. Push cell array of non-empty substrings
XU    % Convert to number. Vectorizes
t     % Duplicate
Zp    % Isprime. Vectorizes.
)     % Index. Keeps substrings indicated by the previous result. Implicit display

2

Sử dụng Bash + GNU Core: 80 77 byte

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|grep -oP ': \K\d+$'
}

Đây không thể là ngắn nhất, nhưng tôi gặp khó khăn với bất cứ điều gì tốt hơn. Cần giúp đỡ!

Bằng cách chỉ sử dụng POSIX, tôi đã nhận được 82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}

Bash chuỗi có thể giúp đỡ? Đó là một phạm vi niềng răng xấu hổ được mở rộng trước các thông số ...
Toby Speight

@TobySpeight sẽ yêu cầu hai vòng lặp (một cho đầu, một cho cuối), chưa kể bạn không thể sử dụng các biến trong một thay thế cắt. Zsh cho phép nó, mặc dù! Con đường chính dẫn đến sự thiếu hụt trong tâm trí tôi là sử dụng Awk để tạo ra tất cả các chuỗi con.
markasoftware





0

Bình thường, 8 byte

fP_TsM.:

Bộ kiểm tra

Lấy đầu vào dưới dạng chuỗi, xuất ra danh sách các số nguyên. Cũng có thể lấy đầu vào làm int bằng cách thêm` vào cuối cho một byte thêm.

Giải trình:
fP_TsM.:  | Full code
fP_TsM.:Q |  with implicit variables added
          | Print (implicit)
      .:Q |  list of all substrings of the input
    sM    |   converted to integers
fP_T      |    filtered for prime numbers

`chỉ cần chuyển đổi intsang str.


0

Ngôn ngữ Wolfram (Mathicala) , 40 byte

Select[PrimeQ@*FromDigits]@*Subsequences

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

Đầu vào và đầu ra là danh sách các chữ số. Trong trường hợp không có số nguyên tố phụ, danh sách trống {}được trả về.

Sử dụng @*cho Compositioncác chức năng. Subsequencesđưa ra một danh sách tất cả các chuỗi con của đầu vào và Select[PrimeQ@*FromDigits]là một dạng toán tử Selecttrả về một danh sách tất cả các phần tử PrimeQ@*FromDigitstrả về True.


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.