Bilangan prima dalam jumlah besar

11

Diberi nomor besar (dalam basis 10), seperti 1234567891011121314151617, temukan "subnumber" utama di dalamnya.
"Subnumber" utama adalah urutan digit berurutan (diambil dari input), yang mewakili bilangan prima (dalam basis 10).

  • Input : Nomor (baik string, file, atau apa pun yang Anda suka).
  • Output : Semua subnumber utama dipisahkan entah bagaimana (baik dalam daftar, file, string dipisahkan koma ...) Jika hasilnya kosong, Anda dapat mengambil konvensi yang Anda suka (string hardcoded, string kosong, omong kosong, tetapi program tidak boleh jatuh.
  • Contoh
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. output kosong]

Ini adalah kode-golf. Program terpendek menang!
[Sunting]: aturan tambahan, program harus dijelaskan! Tidak semua orang fasih berbahasa Jelly :)

Regis Portalez
sumber
3
Selamat datang di PPCG!
Luis felipe De jesus Munoz
Sangat terkait .
user202729
1
tidak ditentukan. Lakukan apapun yang kamu suka.
Regis Portalez
1
Kiat: Terlalu dini untuk menerima jawaban; itu dapat mencegah orang lain dari memposting solusi.
Shaggy
2
Selamat datang di @RegisPortalez, dan tantangan yang menyenangkan! Saya telah menemukan bahwa fitur "accept" tidak lagi digunakan di PPCG seperti di situs lain di jaringan. Kami cenderung menghargai jawaban yang bagus dalam bahasa apa pun.
ngm

Jawaban:

6

05AB1E (warisan) , 3 byte

Œʒp

Cobalah online!

Substring dari input yang prima.

Kaldo
sumber
Itu akan sulit untuk membuatnya lebih pendek :)
Regis Portalez
Bahasa yang tepat untuk tugas ini
Jonathan Allan
5
@ MB Itu tergantung pada encoding. Dalam penyandian 05AB1E , jawaban ini adalah 3 byte.
Dennis
2
Menurut ini, 34567 = 13 * 2659 adalah yang utama, tampaknya salah: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh
2
@frosqh Sebenarnya ini adalah bug dari fungsi p (prime) dalam rilis 05AB1E baru: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA Sudah diperbaiki di repositori tetapi belum didorong pada TIO. Sementara itu, saya mengalihkan jawaban saya ke versi lawas.
Kaldo
6

Perl 6 , 28 byte

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

Cobalah online!

The :ex( "lengkap") bendera untuk operator pertandingan mmembuatnya kembali setiap pertandingan mungkin .+(yaitu, setiap substring dari satu atau lebih karakter), bahkan tumpang tindih yang. Hyperoperator mengubah daftar Matchobjek menjadi angka, yang kemudian difilter untuk pemberian nilai oleh grep &is-prime.

Sean
sumber
Di sini saya akan pergi dengan{+«m:ex/(.+)<?{$0.is-prime}>/}
Brad Gilbert b2gills
@ BradGilbertb2gills Saya mencobanya juga! Saya sedikit kecewa ternyata lebih lama.
Sean
Terima kasih telah menjelaskan - selalu membantu dinosaurus Perl 4 seperti saya!
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

Cobalah online!

ovs
sumber
Seharusnya while k<=natau, dengan biaya 0 byte,while~n+k
Jonathan Allan
@ Jonathanathan Allan terima kasih. Pada awalnya saya pikir angka itu sendiri harus dikeluarkan dari output, tetapi sepertinya ini tidak terjadi.
Ovs
@ JonathanAllan Bisakah Anda jelaskan kode dari whilepernyataannya? Saya belum pernah melihat kode jenis ini sebelumnya. Juga belum melihat penggunaan `` , apa fungsinya?
tarit goswami
1
@taritgoswami while stmt:akan berjalan selama stmtmemiliki nilai yang dianggap benar oleh python. Satu-satunya integer palsu di Python adalah 0. Karenanya kode tersebut akan dijalankan sebagai ~n+k != 0. ~adalah operator komplemen bitwise, dan ~nsetara dengan -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Seperti kita incrementing koleh 1dalam setiap operasi, k != n + 1dalam hal ini setara dengan k <= n.
Ovs
1
@taritgoswami Dan `n`sama dengan repr(n)di Python 2. (tidak berfungsi di Python 3).
Ovs
3

Japt , 13 10 byte

Terima kasih @ Shaggy -3 byte

ò fj f@søX

ò fj f@søX              Full program
                        implicity input
ò                       inclusive range [this - 1]
  fj                    filter primes and
     f@søX              values contained in input

Cobalah online!

Luis felipe De jesus Munoz
sumber
10 byte
Shaggy
3

Jelly ,  5  4 byte

-1 terima kasih kepada Kevin Cruijssen ( alias untuk ÆP)

ẆḌẒƇ

Tautan monadik yang menerima daftar angka * yang menghasilkan daftar bilangan bulat utama.

* pergi dengan "baik string, file, atau apa pun yang Anda suka" - untuk mengambil integer, awali kode dengan D

Cobalah online!

Bagaimana?

ẆḌẒƇ - 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]
Jonathan Allan
sumber
ÆPdapat jika saya tidak salah?
Kevin Cruijssen
Ah ya itu adalah salah satu alias baru - terima kasih!
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);}}

Cobalah online.

Penjelasan:

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
Kevin Cruijssen
sumber
2

MATL , 9 byte

&XfXUtZp)

Cobalah online!

Penjelasan

&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
Luis Mendo
sumber
2

Bash + GNU Core Utils: 80 77 Bytes

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

Ini tidak mungkin yang terpendek, tetapi saya mengalami kesulitan untuk menghasilkan sesuatu yang lebih baik. Dibutuhkan bantuan!

Dengan hanya berpegang pada POSIX, saya mendapat 82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}
perangkat lunak markas
sumber
Bisakah Bash string slicing membantu? Sayang rentang kurung diperluas sebelum parameter ...
Toby Speight
@TobySpeight yang akan membutuhkan dua loop (satu untuk awal, satu untuk akhir), belum lagi Anda tidak dapat menggunakan variabel dalam substitusi slicing. Zsh memungkinkannya! Rute utama menuju kependekan dalam pikiran saya adalah menggunakan Awk untuk menghasilkan semua substring.
markasoftware
2

R , 60 byte

function(v)Filter(function(i)grepl(i,v)&sum(!i%%1:i)==2,1:v)

Cobalah online!

Tidak terlalu efisien, terinspirasi oleh jawaban @ovs python 2

menggali semua
sumber
1
Luar biasa! aturan funprog !
JayCe
1

Python 2 , 115 114 byte

f=lambda s:s and[n for n in[int(s[j:])for j in range(len(s))]if n>1and all(n%i for i in range(2,n))]+f(s[:-1])or[]

Cobalah online!

TFeld
sumber
if~-n*all(n%i for i in range(2,n))menghemat 4.
Mr. Xcoder
0

Bersihkan , 108 byte

import StdEnv,Data.List
$s=nub[n\\u<-inits s,n<-map(toInt o toString)(tails u)|n>1&&all(\m=n/m*m<n)[2..n-1]]

Cobalah online!

Suram
sumber
0

Pyth, 8 byte

fP_TsM.:

Suite uji

Mengambil input sebagai string, menampilkan daftar bilangan bulat. Dapat juga mengambil input sebagai int dengan menambahkan `di bagian akhir untuk byte tambahan.

Penjelasan:
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

Dan `baru saja dikonversi intke str.

hakr14
sumber
0

Bahasa Wolfram (Mathematica) , 40 byte

Select[PrimeQ@*FromDigits]@*Subsequences

Cobalah online!

Input dan output adalah daftar digit. Dalam hal tidak ada subnumber utama daftar kosong {}dikembalikan.

Penggunaan @*untuk Compositionfungsi. Subsequencesmemberikan daftar semua urutan input, dan Select[PrimeQ@*FromDigits]merupakan bentuk operator Selectyang mengembalikan daftar semua elemen yang PrimeQ@*FromDigitsdikembalikan True.

ngenisis
sumber
0

Matlab, 89 byte

function[m]=f(x),m=1;for i=1:length(x),m=[m;str2num(combnk(x,i))];end,m=m(isprime(m));end

Cobalah secara Online!

DimChtz
sumber