¿Pueden los números pares convertirse en primos?

24

La secuencia

Todos saben que el único número primo par es 2. Ho-hum Pero, hay ciertos números pares ndonde, cuando se concatenan n-1, se convierten en un número primo.

Para empezar, 1no está en la lista, porque 10no es primo. De manera similar con 2( 21) y 3( 32). Sin embargo, 4funciona porque 43es primo, por lo que es el primer número de la secuencia a(1) = 4. El siguiente número que funciona (ni 6( 65) ni 8( 87) funciona) es 10, porque 109es primo, entonces a(2) = 10. Luego nos saltamos un montón más hasta que 22, porque 2221es primo, entonces a(3) = 22. Y así.

Obviamente todos los términos en esta secuencia son pares, porque cualquier número impar ncuando se concatena con se n-1convierte en par (como se 3convierte en 32), lo que nunca será primo.

Esta es la secuencia A054211 en OEIS.

El reto

Dado un número de entrada nque encaja en algún lugar de esta secuencia (es decir, nconcatenado con n-1es primo), genera su posición en esta secuencia. Puede elegir entre 0 o 1 indexado, pero indique cuál en su envío.

Reglas

  • Se puede suponer que la entrada y la salida encajan en el tipo entero nativo de su idioma.
  • La entrada y la salida se pueden dar en cualquier formato conveniente .
  • Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
  • Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
  • Las lagunas estándar están prohibidas.
  • Este es el por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).

Ejemplos

Los siguientes ejemplos están indexados en 1.

n = 4
1

n = 100
11

n = 420
51
AdmBorkBork
fuente
1
¿Por qué tienes que hacerlo a la inversa? cQuents no tiene ese modo :(
Stephen
44
@StepHen Solo por un cambio de ritmo; Algo diferente a lo habitual.
AdmBorkBork
99
Siento que esto sería mucho mejor como un problema de decisión.
Wheat Wizard
44
No solo es 2 el único número primo divisible por 2, 3 también es el único número primo divisible por 3, y 5 es el único número primo divisible por 5. En general, un número primo nes siempre el único número primo divisible por n. No es especial, así es como funcionan los números primos.
Esolanging Fruit

Respuestas:

11

Jalea ,  8  7 bytes

ḊżṖVÆPS

Un enlace monádico que toma un miembro de secuencia y devuelve su índice en la secuencia.

Pruébalo en línea!

¿Cómo?

ḊżṖVÆPS - Link: number, n
Ḋ       - dequeue (implicit range) = [ 2   , 3   , 4   ,... ,              n         ]
  Ṗ     - pop (implicit range)     = [   1 ,   2 ,   3 ,... ,                  n-1   ]
 ż      - zip                      = [[2,1],[3,2],[4,3],... ,             [n , n-1]  ]
   V    - evaluate as Jelly code   = [ 21  , 32  , 43  ,... ,         int("n"+"n-1") ]
    ÆP  - is prime? (vectorises)   = [  0  ,  0  ,  1  ,... , isPrime(int("n"+"n-1"))]
      S - sum
Jonathan Allan
fuente
TIO: ¿No está mal para mí, tal vez solo volvió a subir?
Conor O'Brien
1
Corregido hace 2 minutos :)
Jonathan Allan
¡Hermosa! Ese zip(head(), pop())truco es realmente genial. :)
DJMcMayhem
¿En qué codificación están esos 7 bytes?
kylefinn
1
@kylefinn Jelly tiene su propia página de códigos, haga clic en el enlace de bytes en el encabezado para verlo.
Jonathan Allan
8

Haskell , 80 75 70 bytes

5 bytes de ahorro gracias a Laikoni

p x=all((>0).mod x)[2..x-1]
g n=sum[1|x<-[4..n],p$read$show=<<[x,x-1]]

Pruébalo en línea!

Asistente de trigo
fuente
1
Creo que puede usar la prueba principal más corta p x=all((>0).mod x)[2..x-1]que falla para 1, pero esto no debería importar en este caso.
Laikoni
1
También show x++show(x-1)se puede acortar a show=<<[x,x-1].
Laikoni
@Laikoni Gracias por los consejos! Pensé que showpodría hacerse con un método más corto, pero no pensé en un mapa de concat por alguna razón.
Wheat Wizard
6

Gelatina , 12, 10 , 8 bytes

;’VÆPµ€S

Pruébalo en línea!

¡1-2 bytes guardados gracias a @ nmjmcman101, y 2 bytes guardados gracias a @Dennis!

Explicación:

     µ€   # For N in range(input()):
;         #   Concatenate N with...
 ’        #   N-1
  V       #   And convert that back into an integer
   ÆP     #   Is this number prime?
       S  # Sum that list 
DJMcMayhem
fuente
¿Puedes soltar la R y usar el rango implícito?
nmjcman101
@ nmjcman101 Totalmente no sabía que era una cosa. ¡Gracias!
DJMcMayhem
5

05AB1E , 9 8 7 bytes

Código

ƒNN<«pO

Utiliza la codificación 05AB1E .Pruébalo en línea!

Explicación

ƒ          # For N in [0 .. input]..
 NN<«      #   Push n and n-1 concatenated
     p     #   Check for primality
      O    #   Sum the entire stack (which is the number of successes)
Adnan
fuente
Por supuesto, esto aprovecha el hecho de que 05AB1E ignora los errores ... porque no creo que pueda verificar si '0-1'es primo.
Erik the Outgolfer
5

Casco , 13 11 10 bytes

1solución indexada:

#ȯṗdS¤+d←ḣ

Pruébalo en línea!

Ungolfed / Explicación

         ḣ -- in the range [1..N]
#          -- count the number where the following predicate is true
        ←  --   decrement number,
    S  d   --   create lists of digits of number and decremented 
     ¤+    --   concatenate,
   d       --   interpret it as number and
 ȯṗ        --   check if it's a prime number

Gracias @ Zgarb por -3bytes!

ბიმო
fuente
1
£İpes equivalente a . Además, puede guardar un byte con en #…ḣlugar de £f…N.
Zgarb
4

Python 2 , 87 bytes

-2 bytes gracias a @officialaimm . 1 indexado.

lambda n:sum(all(z%v for v in range(2,z))for i in range(4,n+1)for z in[int(`i`+`i-1`)])

Banco de pruebas.

Sr. Xcoder
fuente
Estoy jugando al golf lo antes posible. Las sugerencias son bienvenidas.
Sr. Xcoder
87 bytes
officialaimm
4

Pyth , 12 bytes

smP_s+`d`tdS

Pruébalo en línea! o Verifique todos los casos de prueba.


¿Cómo?

smP_s+`d`tdSQ  -> Full Program. Takes input from Standard Input. Q means evaluated input
                  and is implicit at the end.

 m         SQ  -> Map over the Inclusive Range: [1...Q], with the current value d.
    s+`d`td    -> Concatenate: d, the current item and: td, the current item decremented. 
                  Convert to int.
  P_           -> Prime?
s              -> Sum, counts the occurrences of True.
Sr. Xcoder
fuente
4

Japt , 15 14 12 11 9 8 bytes

1 indexado.

ÇsiZÄÃèj

Intentalo

Ç            :Map each Z in the range [0,input)
 s           :  Convert to string
  i          :    Prepend
   ZÄ        :    Z+1
     Ã       :End map
      è      :Count
       j     :  Primes
Lanudo
fuente
1
11 bytes
Oliver
Gah! ¿Por qué tengo un punto ciego para Æy Ç? Gracias, @Oliver; Actualizaré cuando vuelva a una computadora.
Shaggy
2o+X(con espacio final) funcionaría en lugar de [XXÉ], aunque si alguna vez llego a los []corchetes de equilibrio automático, su solución será un byte más corta. (En realidad 2, ya que podría hacerlo õ_ZÉ]¬nÃèj)
ETHproductions
@ETHproductions: ¡En estos días, lo primero que hago cuando trabajo con una matriz es verificar si se ha agregado el equilibrio automático []! : D
Shaggy
Por alguna razón, creo que los punto y coma han dejado de funcionar por completo, así que intentaré solucionarlo. Sin embargo, no creo que tenga oportunidad hasta mañana por la tarde.
ETHproductions
3

Röda , 73 bytes

{seq 3,_|slide 2|parseInteger`$_2$_1`|{|i|[1]if seq 2,i-1|[i%_!=0]}_|sum}

Pruébalo en línea!

1 indexado. Utiliza la secuencia para hacer entrada y salida.

Explicación:

{
seq 3,_| /* Create a stream of numbers from 3 to input */
slide 2| /* Duplicate every number except the first and the last
            to create (n-1,n) pairs */
parseInteger`$_2$_1`| /* Concatenate n and n-1 and convert to integer */
{|i| /* For every i in the stream: */
    [1]if seq 2,i-1|[i%_!=0] /* Push 1 if i is a prime
                                (not divisible by smaller numbers) */
}_|
sum /* Return the sum of numbers in the stream */
}
fergusq
fuente
2

Pyth , 14 bytes

lfP_Tms+`d`tdS

Pruébalo en línea!

Explicación

              Q    # Implicit input
             S     # 1-indexed range
     m             # For d in range [1, Q]...
      s+`d`td      # Concatenate d and d - 1
 fP_T              # Filter on primes
l                  # Return the length of the list
Jim
fuente
Me ganaste por unos segundos, te
gané
@ Mr.Xcoder Mi primera versión fue lfTmP_s+`d`tdS, es lamentable que no encontré tu truco solo en ese momento :)
Jim
2

Perl 6 , 45 bytes

{first :k,$_,grep {is-prime $_~.pred},1..∞}

Pruébalo en línea!

El grepproduce la secuencia de números calificativos, luego buscamos la clave ( :k) (es decir, el índice) del firstnúmero en la lista que equivale al parámetro de entrada $_.

Sean
fuente
30 bytes
Jo King
2

C, 99 94 bytes

1 indexado. Me duele escribir pruebas de primalidad que son tan inútiles desde el punto de vista computacional, pero los bytes son bytes después de todo.

Si permitimos algunas cosas realmente frágiles, compilar en mi máquina sin optimizaciones con GCC 7.1.1 los siguientes 94 bytes funcionan (gracias @Conor O'Brien )

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}

de lo contrario, estos 99 bytes mucho más robustos hacen el trabajo

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}return c;}

Programa completo, un poco más legible:

i,c,m,k;
f(n){
    c=i=1;
    for(;++i<n;c+=m==k){
        for(k=m=1;m*=10,m<i;);
        for(m=i*m+i-1;++k<m&&m%k;);
    }
    return c;
}

int main(int argc, char *argv[])
{
    printf("%d\n", f(atoi(argv[1])));
    return 0;
}
algmyr
fuente
Dependiendo de su compilador, puede guardar algunos bytes usando en n=c;lugar de return c;:i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
Conor O'Brien
No puedo decir que quiero usar cosas que incluso parecen variar con los niveles de optimización. Usando GCC, sin optimización -O0 funciona, con otros indicadores de optimización no lo hace. Curiosamente, -O1 -O2 y -O3 devuelve 0, con -Os devuelve 1, con -Og devuelve n-1.
algmyr
Siempre puede especificar en su respuesta cómo debe compilarse su programa.
Conor O'Brien
Supongo que se siente un poco barato. Pero puedo agregar una alternativa.
algmyr
Entiendo, pero no me sentiría tan mal por hacer eso: es uno de los consejos para jugar golf en C
Conor O'Brien el
2

JavaScript (ES6),  49 48  47 bytes

1 indexado. Limitado por el tamaño de la pila de llamadas de su motor.

f=n=>n&&f(n-2)+(p=n=>n%--x?p(n):x<2)(x=n+[--n])

Pruébalo en línea!

Arnauld
fuente
1

Mathematica, 77 bytes

Position[Select[Range@#,PrimeQ@FromDigits[Join@@IntegerDigits/@{#,#-1}]&],#]&
J42161217
fuente
0

QBIC , 25 bytes

[:|p=p-µa*z^_l!a$|+a-1}?p

Explicación

[:|     FOR a = 1 to <n>
p=p-    Decrement p (the counter) by
µ       -1 if the following is prime, or 0 if not
        For the concatenating, we multiply 'a' by 10^LENGTH(a), then add a-1$┘p
        Example 8, len(8) = 1, 8*10^1 = 80, add 8-1=7, isPrime(87) = 0
a*z^_l!a$|+a-1
}       Close the FOR loop - this also terminates the prime-test
?p      Print p, the 0-based index in the sequence.

Esto usa algo matemático bastante complicado con un molde de cuerda para una buena medida. Hacer una versión hat hace únicamente concatenación basada en cadenas es un byte más largo:

[:|A=!a$+!a-1$┘p=p-µ!A!}?p
Steenbergh
fuente
0

PHP , 203 bytes

<?php $n=($a=$argv[1]).($a-1);$p=[2];$r=0;for($b=2;$b<=$n;$b++){$x=0;if(!in_array($b,$p)){foreach($p as $v)if(!($x=$b%$v))break;if($x)$p[]=$b;}}for($b=1;$b<=$a;$b++)if(in_array($b.($b-1),$p))$r++;die $r;

Pruébalo en línea!

Utiliza un índice basado en 1 para la salida. El enlace TIO tiene la versión legible del código.

Mic1780
fuente
0

Ruby , 42 + 9 = 51 bytes

Utiliza las -rprime -nbanderas. 1 indexado.

Funciona contando todos los números iguales o inferiores a la entrada que cumple la condición (o más técnicamente, todos los números que cumplen la n-1condición). Dado que la entrada está garantizada para estar en la secuencia, no hay riesgo de error de una entrada aleatoria como 7esa que no "se convierte en primo".

p (?3..$_).count{|i|eval(i.next+i).prime?}

Pruébalo en línea!

Tinta de valor
fuente
0

Python 2 , 85 bytes

1 indexado

lambda n:sum(all(z%v for v in range(2,z))for i in range(3,n)for z in[int(`i+1`+`i`)])

Prueba

Mejora a la respuesta del Sr. Xcoder

Halvard Hummel
fuente
0

Java 8, 108 bytes

n->{for(long r=0,q=1,z,i;;){for(z=new Long(q+""+~-q++),i=2;i<z;z=z%i++<1?0:z);if(z>1)r++;if(q==n)return r;}}

0 indexado

Explicación:

Pruébalo en línea.

n->{                             // Method with integer parameter and long return-type
  for(long r=0,                  //  Result-long, starting at 0
      q=1,                       //  Loop integer, starting at 1
      z,i;                       //  Temp integers
      ;){                        //  Loop indefinitely
    for(z=new Long(q+""+~-q++),  //   Set z to `q` concatted with `q-1`
        i=2;i<z;z=z%i++<1?0:z);  //   Determine if `z` is a prime,
      if(z>1)                    //   and if it indeed is:
        r++;                     //    Increase the result-long by 1
      if(q==n)                   //   If `q` is now equal to the input integer
        return r;}}              //    Return the result
Kevin Cruijssen
fuente
0

Stax , 10 bytes

1- indexado

Äm▬á┌╕|°φ♦

Ejecutar y depurarlo Explicación

Rxr\{$e|pm|+         #Full program, unpacked, implicit input  (Example (4))
R                    #Create [1 to input] range  (ex [1,2,3,4] )             
 x                   #Copy value from x register (ex (4) )
  r                  #Create [0 to input-1] range (ex [0,1,2,3)
   \                 #Create array pair using the range arrays (ex [[1,0],[2,1],[3,2],[4,3]])
    {    m           #Map block
     $e|p            #To string, eval string (toNum), isPrime (ex [1,0] => "10" => 10 => 0)
          |+         #Sum the array to calculate number of truths (ex [0,0,0,1] => 1)
Multi
fuente
0

Ordenado , 33 bytes

index({n:prime(n.n-1|int)}from N)

Pruébalo en línea!

Explicación

La idea básica es crear una secuencia de los números válidos y luego devolver una función de índice curricular.

index({n:prime(n.n-1|int)}from N)
      {n:                }from       select all numbers `n` from...
                               N     the set of natural numbers, such that:
               n.n-1                     `n` concatenated with `n-1`
                    |int                 ...converted to an integer
         prime(         )                ...is prime
index(                          )    function that returns index of input in that sequence
Conor O'Brien
fuente