Primos aditivos entre os primeiros x Primes


16

Definição de Primos Aditivos:

  • Números que têm exatamente 2 divisores são chamados Prime números.

  • Os números primos e a soma dos dígitos também é um número primo são chamados primos aditivos


Tarefa:

Dado um número inteiro x, calcule todos os números primos aditivos entre os primeiros xnúmeros primos, 2sendo considerado o primeiro número primo e o número primo aditivo. Os números são representados na base 10.

Regras:

  • A saída consiste em todos os primos aditivos entre os primeiros xprimos
  • 0 < x < 151, para esse desafio, para fins de funcionalidade
  • Como os números primos aditivos são todos números inteiros, decimais não são permitidos (por exemplo: você deve gerar 2, não 2.0) e eles não devem ser exibidos como uma fração.

Exemplos:

10 -> 2 3 5 7 11 23 29

Explicação:

Os 10 primeiros números primos são 2 3 5 7 11 13 17 19 23 29e 2 3 5 7 11 23 29têm apenas sua soma dos dígitos números primos, sendo esses, respectivamente 2,3,5,7,2,5,11, portanto, são números primos aditivos

Após a explicação de example 1, outros casos de teste podem ser:

2 -> 2 3

25 -> 2 3 5 7 11 23 29 41 43 47 61 67 83 89

7 -> 2 3 5 7 11

Entre os melhores:


NOTA: Por favor, leia a regra 1 recém-editada, que traz alterações no formato de saída ligeiramente


Seu código deve ser o mais curto possível, já que esse é um , portanto a resposta mais curta em bytes vence. Boa sorte!


Isso é bom. Eu recomendo esperar cerca de 24 horas, porque cada vez que você aceita a resposta, eles recebem 15 representantes, mas perdem quando você não aceita. Às vezes, é um pouco frustrante andar na montanha russa e perder e ganhar repetidamente.
Rɪᴋᴇʀ

Respostas:


8

Pyke, 9 7 bytes

~p>#Yss

Experimente online!

O byte único is_primefoi enviado apenas 3 horas atrás. Confirmação do Github .

~p      -    All the prime numbers
  >     -   first input of them
   #Yss -  filter(^)
    Y   -     digits(^)
     s  -    sum(^)
      s -   is_prime(^)

3
Você acabou de editar seu idioma para se adequar a esse desafio? : D
Džuris 5/03/2017

então ... ssignifica is_prime em números e soma em listas?
Conor O'Brien

@ ConorO'Brien sim, sobrecarrego-o para listas e números inteiros #
Blue

@ Džuris não, estou pensando há algum tempo porque não tive um único nó para fazer a verificação primária, apenas fatorando primos e divisores. Antes, eu teria que fazer, _Pque é 1 byte mais longo neste caso
Blue

1
um novo candidato ao "recurso de idioma mais jovem para vencer um desafio"? sob o fio por ~ 2 horas?
Sparr

8

Python 2, 124 118 bytes

Com a ajuda de Riker:

n,f,P=input(),filter,lambda n:all(n%i for i in range(2,n))
f(lambda x:P(sum(map(int,`x`)))&P(x),f(P,range(2,n*n))[:n])

Original:

n,o,c,P=input(),0,2,lambda n:all(n%i for i in range(2,n))
while o<n:
 o+=P(c)
 if P(sum(map(int,`c`)))and P(c):print c
 c+=1

Verificar primalidade em Python não é divertido.


Eu (leia-se: tenho o Conor para escrever um código J legal para mim) testei isso com 9n, não funciona. : / n ** 2 funciona, mas a um custo de 1 byte.
Rɪᴋᴇʀ

Tente n*nparan**2
Conor O'Brien

8

Röda , 136 135 bytes

f n{P=[2]S=[2]seq 3,863|{|i|{P|{P+=i;s=0;((""..i)/"")|parseInteger _|s+=_;S+=i if[s in P and not(i in S)]}if{|p|[i%p>0]}_}if[#P<n]}_;S}

Experimente online!

É uma função que retorna os primos aditivos solicitados.

Uso: main { f(25) | print ap for ap }O código usa a versão 0.12, que está na ramificação roda-0.12.

Ungolfed:

function f(n) {
    primes := [2]
    ultraprimes := [2]
    seq(3, 863) | for i do
        break if [ #primes = n ]
        if [ i%p != 0 ] for p in primes do
            primes += i
            sum := 0
            ((""..i)/"") | parseInteger _ | sum += digit for digit
            ultraprimes += i if [ sum in primes and not (i in ultraprimes) ]
        done
    done
    ultraprimes
}

1
Linguagem agradável! Você fez isso sozinho há muito tempo atrás? 10/10, parece muito legal.
Rɪᴋᴇʀ

Linguagem legal! Como você executa o programa?
Kritixi Lithos 5/03

Estava prestes a perguntar a mesma coisa. Embora tenha examinado a documentação, não consigo executar nem compilar a fonte. Qual é a sua abordagem?
Mr. Xcoder

@KritixiLithos @ Xcoder123 Requer Java 8 e Gradle. A versão que uso nesta resposta é 0,12 (em seu próprio ramo). O repositório deve ser clonado recursivamente. Para fazer um jar executável, chame gradle fatJar. Você recebe algum erro ao compilar?
Fergusq

@fergusq corrente gradle fatJarnão parece criar um jar para mim
Kritixi Lithos

5

Perl 6 , 53 bytes

{grep *.comb.sum.is-prime,grep(*.is-prime,0..*)[^$_]}

Tente

Expandido:

{
  grep
    *.comb.sum.is-prime, # find the ultra primes from:
    grep(
      *.is-prime,        # find the primes
      0..*               # from all integers
    )[ ^$_ ]             # grab only the first x primes
}

Se esse desafio fosse alterado para que você fizesse os primeiros x ultraprimes, isso poderia ser reduzido para apenas

{grep({($_&.comb.sum).is-prime},0..*)[^$_]}

5

Python 2 , 96 87 bytes

p=-input(),0;m=k=1
while sum(p):
 m*=k*k;k+=1;p+=m%k,
 if m%k*p[int(`k`,36)%35]:print k

Graças a @xnor por jogar fora 9 bytes!

Experimente online!



A soma dos dígitos pode ser menor como está int(`k`,36)%35. Todas as entradas serão pequenas o suficiente para que isso seja suficiente.
Xnor


Uau! Não sei bem como pensei em um ditado booleano, mas não em uma tupla booleana (retrospectiva é 20/20), mas sum(p)e int(`k`,36)%35são outras coisas ... Obrigado!
Dennis

5

Mathematica, 61 47 bytes

Prime@Range@#~Select~PrimeQ@*Tr@*IntegerDigits&

Não está totalmente familiarizado com as sintaxes abreviadas do Mathematica - o que é isso @*? A *não se parece com ele está no lugar certo para ser a multiplicação?
numbermaniac

3
@numbermaniac é composição de funções. f@*gé essencialmente f@g@##&.
Martin Ender

4

Gelatina , 10 bytes

ÆNDS$€ĖÆPM

Experimente online!

Quão?

Uma abordagem um pouco diferente ...

ÆNDS$€ĖÆPM - Main link: n (>0)           e.g. 10
ÆN         - nth prime number                 29
     €     - for each in range(1,nth prime)   [1,    2,    3,   ..., 27,    28,     29]
    $      - last two links as a monad
  D        -     decimal digit list          [[1],  [2],  [3],  ...,[2,7], [2,8],  [2,9]]
   S       -     sum                          [1,    2,    3,   ..., 9,     10,     11]
      Ė    - enumerate                       [[1,1],[2,2],[3,3],...,[9,27],[10,28],[11,29]]
       ÆP  - is prime? (vectorises)          [[0,0],[1,1],[1,1],...,[0,1], [0,0],  [1,1]]
         M - indices of maximal elements     [       2,    3,   ...,                29]

3
Bom uso de Ė.
Dennis


3

Gelatina , 11 bytes

ÆN€DS$ÆP$Ðf

Experimente online!

Explicação:

DSN € DS $ PP $ Ðf Link principal (args: z)
ÆN € Gere os primeiros primos z.
   DS $ Pegue a soma digital.
      ÆP Verifique se está pronto.
        $ Junte os dois últimos links e faça uma mônada.
         Keepf Mantenha apenas os elementos que atendem ao critério acima.

Eu fui derrotado.


2

MATL, 15 13 bytes

2 bytes salvos graças a @Luis

:Yq"@V!UsZp?@

Experimente no MATL Online

Explicação

        % Implicitly grab input as a number (N)
:       % Create an array [1...N]
Yq      % Get the k-th prime for each element k in that array
"       % For each element in this list
  @     % Get the current element
  V!U   % Break it into digits
  s     % Sum up the digits
  Zp    % Determine if this is a prime number
  ?@    % If it is, push the value to the stack
        % Implicit end of for loop and implicit display of the stack

@LuisMendo Ah! Eu sabia que havia alguma maneira de encurtar a primeira parte. Obrigado
Suever


1

Ohm , 10 bytes (CP437)

@▓_π;░_}Σp

Isso seria muito menor se eu tivesse vetorização ou um componente para os primeiros N primos, mas infelizmente não o fiz antes deste desafio (mas tenho agora !).

Explicação:

@▓_π;░_}Σp    Main wire, arguments: a

@▓  ;         Map...over the range (1..n)
  _π            nth prime
     ░        Select from ToS where...
      _}Σ       The sum of all digits
         p      is prime

1

PowerShell , 120 bytes

for($n=$args[0];$n){for(;'1'*++$i-notmatch($s='^(?!(..+)\1+$)..')){}if('1'*([char[]]"$i"-join'+'|iex)-match$s){$i};$n--}

Experimente online!

A verificação primária no PowerShell é péssima.

O forloop externo vai da entrada $npara baixo 0. No loop interno, usamos um gerador primário e$i , em seguida, verificamos se ifa soma dos dígitos ( -join'+'|iex) também é primo. Se assim for, colocamos $io pipeline. Nos dois casos, diminuímos $n--e o forloop externo continua. Os $is resultantes são coletados do pipeline e um implícito Write-Outputacontece na conclusão do programa.



0

MATL , 13 bytes

:YqtFYA!XsZp)

Experimente no MATL Online!

Explicação

:      % Range [1 2 ... n], where n is implicit input
Yq     % Array of first n prime numbers
t      % Duplicate
FYA    % Convert to decimal digits. Gives a matrix, where each original 
       % number corresponds to a row. Left-pads with zeros if needed
!Xs    % Sum of rows
Zp     % Is prime? (element-wise)
)      % Use as logical index into the array of the first n prime numbers
       % Implicitly display
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.