Numeri primi in gran numero


11

Dato un gran numero (nella base 10), come 1234567891011121314151617, trova in esso i "numeri secondari" principali.
Un "numero secondario" primo è una sequenza consecutiva di cifre (presa dall'input), che rappresenta un numero primo (nella base 10).

  • Input : un numero (una stringa, un file o qualunque cosa tu voglia).
  • Output : tutti i numeri secondari principali separati in qualche modo (in un elenco, un file, stringhe separate da virgola ...) Se il risultato è vuoto, puoi prendere qualsiasi convenzione che ti piace (stringa hardcoded, stringa vuota, incomprensibile, ma il programma non dovrebbe bloccarsi.
  • Esempio
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. output vuoto]

Questo è code-golf. Vince il programma più corto!
[modifica]: regola aggiuntiva, il programma deve essere spiegato! Non tutti parlano fluentemente Jelly :)


3
Benvenuti in PPCG!
Luis felipe De jesus Munoz,


1
non specificato. Fare quello che ti piace.
Regis Portalez,

1
Suggerimento: è troppo presto per accettare una risposta; può scoraggiare gli altri dal pubblicare soluzioni.
Shaggy,

2
@RegisPortalez benvenuti, e bella sfida! Ho scoperto che la funzione "accetta" non è più utilizzata su PPCG come negli altri siti della rete. Tendiamo a dare una buona risposta in qualsiasi lingua.
ngm

Risposte:


6

05AB1E (legacy) , 3 byte

Œʒp

Provalo online!

Sottostringhe dell'input che sono prime.


Sarà difficile accorciare :)
Regis Portalez,

La lingua giusta per questo compito
Jonathan Allan,

5
@mob Dipende dalla codifica. Nella codifica 05AB1E , questa risposta è lunga 3 byte.
Dennis,

2
Secondo questo, 34567 = 13 * 2659 è primo, sembra sbagliato: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh

2
@frosqh In realtà è un bug della funzione p (prime) nella nuova versione 05AB1E : tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA È già stato corretto nel repository ma non è stato inserito in TIO. Nel frattempo ho cambiato la mia risposta alla versione precedente.
Kaldo,

6

Perl 6 , 28 byte

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

Provalo online!

Il :exflag ("esaustivo") per l'operatore di match mfa sì che restituisca ogni possibile match di .+(cioè ogni sottostringa di uno o più caratteri), anche quelli sovrapposti. L'iperoperatore trasforma quell'elenco di Matchoggetti in numeri, che vengono quindi filtrati per primosità grep &is-prime.


Qui stavo per andare con{+«m:ex/(.+)<?{$0.is-prime}>/}
Brad Gilbert b2gills

@ BradGilbertb2gills L'ho provato anche io! Sono un po 'deluso che si è rivelato più lungo.
Sean,

Grazie per aver spiegato - sempre utile per i dinosauri Perl 4 come me!
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

Provalo online!


Dovrebbe essere while k<=no, al costo di 0 byte,while~n+k
Jonathan Allan il

@JonathanAllan grazie. All'inizio ho pensato che il numero stesso dovesse essere escluso dall'output, ma sembra che non sia così.
Ovs

@JonathanAllan Puoi spiegare per favore il codice della whiledichiarazione? Non ho mai visto questo tipo di codici prima. Inoltre non ho visto l'uso di `` , cosa fa?
tarit goswami,

1
@taritgoswami while stmt:funzionerà finché stmtavrà un valore che è considerato vero da Python. L'unico numero errato in Python è 0. Pertanto il codice verrà eseguito come ~n+k != 0. ~è l'operatore del complemento bit a bit ed ~nè equivalente a -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Come stiamo incrementando kda 1in ogni operazione, k != n + 1è in questo caso pari a k <= n.
Ovs

1
@taritgoswami Ed `n`è lo stesso repr(n)di Python 2. (non funziona in Python 3).
Ovs


3

Gelatina ,  5  4 byte

-1 grazie a Kevin Cruijssen ( è un alias per ÆP)

ẆḌẒƇ

Un collegamento monadico che accetta un elenco di cifre * che produce un elenco di numeri primi interi.

* andando da "una stringa, un file o qualunque cosa ti piaccia" - per prendere un numero intero, aggiungi il prefisso al codice con un D

Provalo online!

Come?

ẆḌẒƇ - 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]

ÆPpuò essere se non sbaglio?
Kevin Cruijssen,

Ah sì, questo è uno dei nuovi alias - grazie!
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);}}

Provalo online.

Spiegazione:

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)

Provalo online!

Spiegazione

&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

Utilità Bash + GNU: 80 77 byte

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

Questo non può essere il più breve, ma ho difficoltà a trovare qualcosa di meglio. Cercasi assistente!

Attenendomi solo a POSIX, ho ottenuto 82:

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

L'affettamento delle stringhe di Bash potrebbe essere d'aiuto? È un peccato che le gamme di parentesi graffe vengano espanse prima che i parametri ...
Toby Speight,

@TobySpeight che richiederebbe due loop (uno per l'inizio, uno per la fine), per non parlare del fatto che non è possibile utilizzare le variabili all'interno di una sostituzione di divisione. Zsh lo consente, però! La strada principale verso la mancanza di conoscenza è usare Awk per generare tutte le sottostringhe.
markasoftware,





0

Pyth, 8 byte

fP_TsM.:

Suite di test

Prende l'input come una stringa, genera un elenco di numeri interi. Può anche prendere input come int aggiungendo `alla fine per un byte extra.

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

E si `converte intin str.


0

Wolfram Language (Mathematica) , 40 byte

Select[PrimeQ@*FromDigits]@*Subsequences

Provalo online!

Input e output sono elenchi di cifre. Nel caso di nessun numero secondario secondario {}viene restituito l'elenco vuoto .

Utilizza @*per Compositionfunzioni. Subsequencesfornisce un elenco di tutte le sottosequenze dell'input ed Select[PrimeQ@*FromDigits]è una forma di operatore Selectche restituisce un elenco di tutti gli elementi per i quali PrimeQ@*FromDigitsrestituisce True.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.