Números primos em grande número

11

Dado um grande número (na base 10), como 1234567891011121314151617, encontre "sub-números" principais.
Um "subnúmero" principal é uma sequência consecutiva de dígitos (obtida da entrada), que representa um número primo (na base 10).

  • Entrada : um número (uma sequência, um arquivo ou o que você quiser).
  • Saída : Todos os subnúmeros principais separados de alguma forma (em uma lista, um arquivo, sequências separadas por vírgula ...) Se o resultado estiver vazio, você poderá fazer qualquer convenção que desejar (sequência codificada, sequência vazia, sem sentido, mas o programa não deve batida.
  • Exemplo
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. saída vazia]

Isso é código-golfe. O programa mais curto vence!
[editar]: regra adicional, o programa deve ser explicado! Nem todo mundo é fluente em geléia :)

Regis Portalez
fonte
3
Bem-vindo ao PPCG!
Luis felipe De jesus Munoz
1
não especificado. Faça o que quiser.
Regis Portalez 22/08/18
1
Dica: é muito cedo para aceitar uma resposta; isso pode desencorajar outras pessoas a publicar soluções.
Shaggy
2
Bem-vindo, @RegisPortalez, e bom desafio! Descobri que o recurso "accept" não é mais usado no PPCG do jeito que é nos outros sites da rede. Nós tendemos a valorizar boas respostas em qualquer idioma.
ngm

Respostas:

6

05AB1E (herdado) , 3 bytes

Œʒp

Experimente online!

Substrings da entrada que são primos.

Kaldo
fonte
Isso vai ser difícil fazer mais curto :)
Regis Portalez
Linguagem certa para esta tarefa
Jonathan Allan
5
@mob Isso depende da codificação. Na codificação 05AB1E , esta resposta tem 3 bytes.
Dennis
2
De acordo com isso, 34567 = 13 * 2659 é primo, parece errado: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh
2
@frosqh Na verdade, é um bug da função p (prime) na nova versão 05AB1E : tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA Ele já foi corrigido no repositório, mas não foi enviado ao TIO. Enquanto isso, mudei minha resposta para a versão herdada.
Kaldo
6

Perl 6 , 28 bytes

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

Experimente online!

O :exsinalizador ("exaustivo") para o operador de correspondência mfaz com que ele retorne todas as correspondências possíveis de .+(ou seja, cada substring de um ou mais caracteres), mesmo as sobrepostas. O hiperoperador transforma essa lista de Matchobjetos em números, que são filtrados por primidez por grep &is-prime.

Sean
fonte
Aqui eu estava indo para ir com{+«m:ex/(.+)<?{$0.is-prime}>/}
Brad Gilbert b2gills
@ BradGilbertb2gills Eu tentei isso também! Estou um pouco decepcionado por ter demorado mais.
22418 Sean
Obrigado por explicar - sempre útil para os dinossauros Perl 4 como eu!
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

Experimente online!

ovs
fonte
Deve ser while k<=nou, ao custo de 0 bytes,while~n+k
Jonathan Allan
@JonathanAllan obrigado. No começo, pensei que o número em si deveria ser excluído da saída, mas parece que esse não é o caso.
ovs 22/08/18
@ JonathanAllan Você pode explicar por favor o código da whiledeclaração? Eu não vi esse tipo de código antes. Também não vi o uso de `` , o que faz?
tarit goswami
1
O @taritgoswami while stmt:funcionará contanto que stmttenha um valor que seja considerado verdadeiro pelo python. O único inteiro falso no Python é 0. Portanto, o código será executado como ~n+k != 0. ~é o operador de complemento bit a bit e ~né equivalente a -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Como estamos incrementando kpor 1em cada operação, k != n + 1é, neste caso, equivalente a k <= n.
ovs 23/08/18
1
@taritgoswami E `n`é o mesmo que repr(n)no Python 2. (não funciona no Python 3).
ovs 23/08/18
3

Japonês , 13 10 bytes

Obrigado @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

Experimente online!

Luis felipe De jesus Munoz
fonte
10 bytes
Shaggy
3

Geléia ,  5  4 bytes

-1 graças a Kevin Cruijssen ( é um pseudônimo para ÆP)

ẆḌẒƇ

Um link monádico que aceita uma lista de dígitos * que produz uma lista de números inteiros primos.

* passando por "uma string, um arquivo ou o que você quiser" - para obter um número inteiro, prefixe o código com um D

Experimente online!

Quão?

ẆḌẒƇ - 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
fonte
ÆPpode ser se não me engano?
Kevin Cruijssen
Ah, sim, esse é um dos novos apelidos - obrigado!
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);}}

Experimente online.

Explicação:

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

MATL , 9 bytes

&XfXUtZp)

Experimente online!

Explicação

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

Isso não pode ser o mais curto, mas estou tendo problemas para encontrar algo melhor. Procura-se ajuda!

Ao aderir apenas ao POSIX, obtive 82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}
markasoftware
fonte
O fatiamento de cordas do Bash poderia ajudar? É uma cinta vergonha faixas são expandidos antes de parâmetros ...
Toby Speight
@TobySpeight que exigiria dois loops (um para o início e outro para o final), sem mencionar que você não pode usar variáveis ​​dentro de uma substituição de fatiamento. O Zsh permite, no entanto! A principal rota para a falta de conhecimento é usar o Awk para gerar todas as substrings.
Markasoftware 23/08/19
2

R , 60 bytes

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

Experimente online!

Não é realmente eficiente, inspirado na resposta do @ovs python 2

digEmAll
fonte
1
Impressionante! regras do 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[]

Experimente online!

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

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

Experimente online!

Furioso
fonte
0

Pitão, 8 bytes

fP_TsM.:

Suíte de teste

Pega a entrada como uma sequência e gera uma lista de números inteiros. Também pode receber entrada int adicionando `no final um byte extra.

Explicação:
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 `apenas converte intpara str.

hakr14
fonte
0

Wolfram Language (Mathematica) , 40 bytes

Select[PrimeQ@*FromDigits]@*Subsequences

Experimente online!

Entrada e saída são listas de dígitos. No caso de não haver subnúmeros primos, a lista vazia {}é retornada.

Usa @*para Compositionfunções. Subsequencesfornece uma lista de todas as subsequências da entrada e Select[PrimeQ@*FromDigits]é uma forma de operador Selectque retorna uma lista de todos os elementos para os quais PrimeQ@*FromDigitsretorna True.

ngenisis
fonte
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

Experimente Online!

DimChtz
fonte