Números primos en gran número

11

Dado un gran número (en la base 10), como 1234567891011121314151617, encuentre "subnúmeros" primos en él.
Un "subnúmero" primo es una secuencia consecutiva de dígitos (tomados de la entrada), que representa un número primo (en la base 10).

  • Entrada : un número (ya sea una cadena, un archivo o lo que quieras).
  • Salida : todos los subnúmeros principales separados de alguna manera (ya sea en una lista, un archivo, cadenas separadas por comas ...) Si el resultado está vacío, puede tomar cualquier convención que desee (cadena codificada, cadena vacía, galimatías, pero el programa no debería choque.
  • Ejemplo
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. salida vacía]

Este es el código de golf. ¡El programa más corto gana!
[editar]: regla adicional, el programa debe ser explicado! No todos hablan con fluidez Jelly :)

Regis Portalez
fuente
3
Bienvenido a PPCG!
Luis felipe De jesus Munoz
1
no especificado. Haz lo que quieras.
Regis Portalez
1
Consejo: Eso es demasiado pronto para aceptar una respuesta; Puede disuadir a otros de publicar soluciones.
Shaggy
2
@RegisPortalez, bienvenido, y un lindo desafío! Descubrí que la función "aceptar" ya no se usa tanto en PPCG como en los otros sitios de la red. Tendemos a valorar buenas respuestas en cualquier idioma.
ngm

Respuestas:

6

05AB1E (heredado) , 3 bytes

Œʒp

Pruébalo en línea!

Subcadenas de la entrada que son primas.

Kaldo
fuente
Será difícil acortar :)
Regis Portalez
Lenguaje correcto para esta tarea
Jonathan Allan
55
@mob Eso depende de la codificación. En la codificación 05AB1E , esta respuesta tiene 3 bytes de longitud.
Dennis
2
De acuerdo con esto, 34567 = 13 * 2659 es primo, parece incorrecto: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh
2
@frosqh En realidad es un error de la función p (prime) en la nueva versión 05AB1E : tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA Ya se ha corregido en el repositorio pero no se ha introducido en TIO. Mientras tanto, he cambiado mi respuesta a la versión heredada.
Kaldo
6

Perl 6 , 28 bytes

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

Pruébalo en línea!

El :exindicador ("exhaustivo") para el operador de coincidencia mhace que devuelva cada coincidencia posible de .+(es decir, cada subcadena de uno o más caracteres), incluso superpuestos. El hiperoperador convierte esa lista de Matchobjetos en números, que luego se filtran por primo grep &is-prime.

Sean
fuente
Aquí me iba a ir con{+«m:ex/(.+)<?{$0.is-prime}>/}
Brad Gilbert b2gills
@ BradGilbertb2gills ¡También lo intenté! Estoy un poco decepcionado, resultó ser más largo.
Sean
Gracias por explicar, ¡siempre es útil para los dinosaurios de Perl 4 como yo!
Toby Speight
5

Python 2 , 66 65 bytes

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

Pruébalo en línea!

ovs
fuente
Debería ser while k<=no, para costar 0 bytes,while~n+k
Jonathan Allan
@ JonathanAllan gracias. Al principio pensé que el número en sí debería excluirse de la salida, pero parece que este no es el caso.
ovs
@ JonathanAllan ¿Puede explicar por favor el código de la whiledeclaración? No he visto este tipo de códigos antes. Tampoco he visto el uso de `` , ¿qué hace?
tarit goswami
1
@taritgoswami while stmt:se ejecutará siempre que stmttenga un valor que Python considere verdadero. El único entero falso en Python es 0. Por lo tanto, el código se ejecutará como ~n+k != 0. ~es el operador de complemento bit a bit y ~nes equivalente a -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Como estamos incrementando kpor 1en cada operación, k != n + 1en este caso es equivalente a k <= n.
ovs
1
@taritgoswami Y `n`es lo mismo que repr(n)en Python 2. (no funciona en Python 3).
ovs
3

Japt , 13 10 bytes

Gracias @Shaggy -3 bytes

ò 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

Pruébalo en línea!

Luis felipe De jesus Munoz
fuente
10 bytes
Shaggy
3

Jalea ,  5  4 bytes

-1 gracias a Kevin Cruijssen ( es un alias para ÆP)

ẆḌẒƇ

Un enlace monádico que acepta una lista de dígitos * que produce una lista de enteros primos.

* pasando por "una cadena, un archivo o lo que quieras" - para tomar un número entero, prefije el código con D

Pruébalo en línea!

¿Cómo?

ẆḌẒƇ - 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
fuente
ÆPpuede ser si no me equivoco?
Kevin Cruijssen
Ah sí, ese es uno de los nuevos alias, ¡gracias!
Jonathan Allan
2

Java 8, 148 147 bytes

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

Pruébalo en línea.

Explicación:

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
fuente
2

MATL , 9 bytes

&XfXUtZp)

Pruébalo en línea!

Explicación

&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
fuente
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+$'
}

Esto no puede ser lo más corto, pero tengo problemas para encontrar algo mejor. ¡Se busca ayudante!

Al apegarme solo a POSIX, obtuve 82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}
markasoftware
fuente
¿Podría ayudar el corte de cadenas de Bash? Es una pena que los rangos de llaves se expandan antes de los parámetros ...
Toby Speight
@TobySpeight que requeriría dos bucles (uno para el inicio, uno para el final), sin mencionar que no puede usar variables dentro de una sustitución de corte. ¡Zsh lo permite, sin embargo! La ruta principal a la brevedad en mi mente es usar Awk para generar todas las subcadenas.
markasoftware
2

R , 60 bytes

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

Pruébalo en línea!

No es realmente eficiente, inspirado por la respuesta de @ovs python 2

digEmAll
fuente
1
¡Increíble! reglas de funprog !
JayCe
1

Python 2 , 115 114 bytes

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

Pruébalo en línea!

TFeld
fuente
if~-n*all(n%i for i in range(2,n))ahorra 4.
Sr. Xcoder
0

Limpio , 108 bytes

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

Pruébalo en línea!

Οurous
fuente
0

Pyth, 8 bytes

fP_TsM.:

Banco de pruebas

Toma la entrada como una cadena, genera una lista de enteros. También puede tomar la entrada como un int agregando `al final un byte adicional.

Explicación:
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

Y `solo se convierte inta str.

hakr14
fuente
0

Wolfram Language (Mathematica) , 40 bytes

Select[PrimeQ@*FromDigits]@*Subsequences

Pruébalo en línea!

Entrada y salida son listas de dígitos. En el caso de que no haya subnúmeros primos, se devuelve la lista vacía {}.

Usos @*para Compositionde funciones. Subsequencesda una lista de todas las subsecuencias de la entrada, y Select[PrimeQ@*FromDigits]es una forma de operador de la Selectque se devuelve una lista de todos los elementos para los que se PrimeQ@*FromDigitsdevuelve True.

ngenisis
fuente
0

Matlab, 89 bytes

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

Pruébalo en línea!

DimChtz
fuente