Defina que el número natural p es un primo +1 del número natural n si p es un número primo y la representación binaria estándar (es decir, sin ceros a la izquierda) de p se puede obtener sumando (es decir, anteponiendo, agregando o insertando) un solo 1 a la representación binaria estándar de n .
Por ejemplo, la representación binaria de 17 es 10001 2 . Los distintos números naturales que se pueden formar sumando un 1 a 10001 2 son 110001 2 o 49 , 101001 2 o 41 , 100101 2 o 37 , y 100011 2 o 35 .
Entre estos, 41 y 37 son números primos, entonces 17 tiene dos primos +1 .
Tarea
Escriba un programa o función que acepte un entero estrictamente positivo n como entrada e imprima o devuelva el número de primos +1 distintos de n .
La entrada y la salida deben ser un número entero o su representación de cadena decimal o unaria.
Aplican reglas estándar de código de golf .
Casos de prueba
Input: 4
Output: 0
Input: 1
Output: 1
Input: 17
Output: 2
Input: 33
Output: 3
Input: 553
Output: 4
Input: 3273
Output: 5
Input: 4145
Output: 6
Input: 4109
Output: 7
Input: 196869
Output: 8
Respuestas:
Pyth, 20 bytes
Banco de pruebas
fuente
JavaScript ES6, 141 bytes
143147160Ahorra 13 bytes, gracias a @Naouak
Método similar a mi respuesta de TeaScript, utiliza RegExp (me escuchaste bien) para verificar los números primos.
Sin golf
fuente
(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0)('0b'+l,2)
lugar de!Array(+('0b'+l)+1).join(1).match(/^1?$|^(11+?)\1+$/)
Minkolang 0.11 ,
5452 bytesExplicación
fuente
TeaScript , 22 bytes
TeaScript comienza a parecerse a APL ... Los caracteres especiales se convierten en secuencias más largas y comúnmente repetidas
Intérprete en línea, asegúrese de marcar "Las entradas son números".
Explicación && Ungolfed
fuente
Julia,
5552 bytesk=2.^(0:endof(bin(n)))
genera una matriz que contiene las potencias de 2 de 1 a la potencia más alta menor quen
.2n+k-n%k
luego usa operaciones de matriz para determinar todos los posibles "números +1".∪
(equivalente aunion
, que hace lo mismo queunique
en esta situación) elimina los valores repetidos. Luegosum(isprime,)
cuenta el número de primos en la lista.fuente
CJam, 26 bytes
No es un ganador, pero supera las respuestas existentes de CJam con bastante solidez y es la primera vez que uso el comando 0.6.5
e\
.Pruébalo aquí.
Explicación
Una cosa que vale la pena señalar es que intercambiamos los bits en
0
y1
antes de hacer la primera copia, por lo que perdemos la matriz original con el1
antepuesto al frente. Sin embargo, la entrada siempre es positiva, por lo que el dígito inicial siempre será uno. Eso significa que después de anteponer otro, la lista de dígitos siempre comenzará, por[1 1 ...]
lo que el primer intercambio será no operativo en cualquier caso.fuente
Mathematica, 87 bytes
fuente
Julia,
11010810487 bytesEsto crea una función sin nombre que acepta un número entero y devuelve un número entero. Para llamarlo, dale un nombre, por ejemplo
f=n->...
.Sin golf:
Guardado 17 bytes gracias a Glen O!
fuente
bin
tiene que comenzar con un 1, por lo que no necesita manejar por separado"1"b
. Y cuándoi=length(b)
, tendráb[i+1:end]
equivalente a""
, por lo que no necesita esa entrada (solo necesita manejarb=bin(n)
en algún momento). Ysum
hará lo mismo quecount
para dos bytes menos.b
todos modos, también podría obtenerlo con un poco de truco,b=bin(n)[s=1:end]
y luegofor i=s
para la comprensión.bin
debe ser 1, y obtendrá esto:n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);unique([b[[1:i;1;i+1:end]]for i=1:endof(b)])))
esto reduce la cuenta a 90 bytes.unique
conunion
: hará lo mismo, si se le da una sola matriz como entrada. O mejor aún, en∪
lugar deunion
.CJam, 58 bytes
Esto me llevó un día, y esta fue mi cuarta iteración.
fuente
Japt
-x
,1411 bytesPruébalo o ejecuta todos los casos de prueba
fuente
PHP, 145 bytes
He agregado una nueva línea para facilitar la lectura:
fuente
CJam, 34 bytes
Pruébalo en línea
Primera versión, se actualizará si se me ocurre algo mejor.
fuente
APL, 55
Versión específica de Dyalog 2 bytes más corta:
fuente
Matlab (120)
fuente
Brachylog , 17 bytes
Pruébalo en línea!
Entrada a través de la variable de entrada y salida a través de la variable de salida.
fuente
Jalea , 13 bytes
Pruébalo en línea!
fuente
Python 2 , 103 bytes
Pruébalo en línea!
fuente