Prima aditiva entre las primeras x primas


16

Definición de prima aditiva:

  • Los números que tienen exactamente 2 divisores se llaman números primos .

  • Los números que son primos y su suma de dígitos también es un número primo se llaman Primos Aditivos


Tarea:

Dado un número entero x, calcule todos los primos aditivos entre los primeros xnúmeros primos, 2considerándolo tanto el primer número primo como el primo aditivo. Los números están representados en la base 10.

Reglas:

  • La salida consta de todos los primos aditivos entre los primeros xprimos
  • 0 < x < 151, para este desafío, para fines de funcionalidad
  • Dado que los primos aditivos son todos enteros, los decimales no están permitidos (por ejemplo: debe generar 2, no 2.0) y no deben mostrarse como una fracción.

Ejemplos:

10 -> 2 3 5 7 11 23 29

Explicación:

Los primeros 10 primos son 2 3 5 7 11 13 17 19 23 29, y solo 2 3 5 7 11 23 29tienen su suma de números primos de dígitos, siendo estos, respectivamente 2,3,5,7,2,5,11, por lo que son primos aditivos

Siguiendo la explicación de example 1, otros casos de prueba pueden 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

Tabla de clasificación:


NOTA: Lea la regla 1 recién editada, trae cambios al formato de salida ligeramente


Su código debe ser lo más corto posible, ya que es , por lo que gana la respuesta más corta en bytes. ¡Buena suerte!


Esta bien. Sin embargo, recomiendo esperar alrededor de 24 horas, porque cada vez que aceptas la respuesta obtienen 15 repeticiones, pero la pierden cuando no aceptas. A veces es un tanto frustrante subirse a la montaña rusa y continuamente perder y ganar reputación.
Rɪᴋᴇʀ

Respuestas:


8

Pyke, 9 7 bytes

~p>#Yss

Pruébalo en línea!

El byte is_primeúnico solo se presionó hace 3 horas. Github commit .

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

3
¿Acabas de editar tu idioma para adaptarse a este desafío? : D
Džuris

entonces ... ssignifica is_prime en números y suma en listas?
Conor O'Brien

@ ConorO'Brien sí, lo sobrecargo para listas y enteros
Blue

@ Džuris no, he querido hacerlo por un tiempo porque no he tenido un solo nodo para hacer la verificación de primos, solo factorizando en primos y divisores. Antes habría tenido que hacer, _Pque es 1 byte más en este caso
Azul

1
¿Un nuevo contendiente para "la función de lenguaje más joven para ganar un desafío"? debajo del cable por ~ 2 horas?
Sparr

8

Python 2, 124 118 bytes

Con la ayuda 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 la primalidad en Python no es divertido.


Yo (léase: conseguí que Conor escribiera un código J genial para mí) lo he probado con 9n, no funciona. : / n ** 2 funciona, pero a un costo de 1 byte.
Rɪᴋᴇʀ

Trate n*nden**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}

Pruébalo en línea!

Es una función que devuelve los primos aditivos solicitados.

Uso: main { f(25) | print ap for ap }El código usa la versión 0.12, que está en rama roda-0.12.

Sin golf:

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
Buen lenguaje! ¿Lo hiciste tú mismo hace mucho tiempo? 10/10, se ve muy bien.
Rɪᴋᴇʀ

Lenguaje aseado! ¿Cómo ejecutas el programa?
Kritixi Lithos

Estaba a punto de preguntar lo mismo. Aunque revisé la documentación, no puedo ejecutar ni compilar la fuente en absoluto. ¿Cuál es tu enfoque?
Sr. Xcoder

@KritixiLithos @ Xcoder123 Requiere Java 8 y Gradle. La versión que uso en esta respuesta es 0.12 (en su propia rama). El repositorio debe ser clonado recursivamente. Para hacer un frasco ejecutable, invoque gradle fatJar. ¿Tienes algún error al compilar?
fergusq

@fergusq Correr gradle fatJarno parece crear un frasco para mí
Kritixi Lithos

5

Perl 6 , 53 bytes

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

Intentalo

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
}

Si se cambiara este desafío para que tomara los primeros x ultraprimes, esto podría acortarse

{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

¡Gracias a @xnor por jugar golf en 9 bytes!

Pruébalo en línea!


Parece que usar una lista de variables indicadoras es más corto.
xnor

La suma de dígitos se puede hacer más corta como está int(`k`,36)%35. Todas las entradas serán lo suficientemente pequeñas como para que esto sea suficiente.
xnor


¡Guauu! No estoy seguro de cómo pensé en un dict booleano, pero no en una tupla booleana (en retrospectiva es 20/20), sum(p)y int(`k`,36)%35son otra cosa ... ¡Gracias!
Dennis

5

Mathematica, 61 47 bytes

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

No está completamente familiarizado con las sintaxis abreviadas de Mathematica, ¿qué es eso @*? El *no se ve como si estuviera en el lugar correcto para ser la multiplicación?
numbermaniac

3
@numbermaniac es composición de funciones. f@*ges esencialmente f@g@##&.
Martin Ender

4

Jalea , 10 bytes

ÆNDS$€ĖÆPM

Pruébalo en línea!

¿Cómo?

Un enfoque ligeramente 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
Buen uso de Ė.
Dennis


3

Jalea , 11 bytes

ÆN€DS$ÆP$Ðf

Pruébalo en línea!

Explicación:

ÆN € DS $ ÆP $ Ðf Enlace principal (args: z)
ÆN € Genera los primeros z primos.
   DS $ Tome la suma digital.
      ÆP Compruebe si es primo.
        $ Únete a los dos últimos enlaces y crea una mónada.
         Ðf Mantenga solo elementos que cumplan con el criterio anterior.

Me sobrepasé.


2

MATL, 15 13 bytes

2 bytes guardados gracias a @Luis

:Yq"@V!UsZp?@

Pruébalo en MATL Online

Explicación

        % 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! Sabía que había alguna forma de acortar esa primera parte. Gracias
Suever


1

Ohm , 10 bytes (CP437)

@▓_π;░_}Σp

Esto sería mucho más corto si tuviera vectorización o un componente para los primeros N primos, pero, por desgracia, no lo hice antes de este desafío (¡pero ahora sí !).

Explicación:

@▓_π;░_}Σ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--}

Pruébalo en línea!

La comprobación principal en PowerShell apesta.

El forbucle externo va desde la entrada $nhacia abajo 0. En el bucle interno, se utiliza un generador de prime en $i, a continuación, comprobar ifla suma de dígitos ( -join'+'|iex) también es un número primo. Si es así, nos ponemos $ien la tubería. En cualquier caso, disminuimos $n--y el forbucle externo continúa. Los $is resultantes se recopilan de la canalización y Write-Outputsucede implícitamente al finalizar el programa.



0

MATL , 13 bytes

:YqtFYA!XsZp)

Pruébalo en MATL Online!

Explicación

:      % 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.