Redivosite es una palabra común inventada con el único propósito de este desafío. Es una mezcla de Reducción, División y Compuesto.
Definición
Dado un entero N> 6 :
- Si N es primo, N no es un número de redivosita.
- Si N es compuesto:
- calcular repetidamente N '= N / d + d + 1 hasta que N' sea primo, donde d es el divisor más pequeño de N mayor que 1
- N es un número de redivosita si y solo si el valor final de N ' es un divisor de N
A continuación se muestran los 100 primeros números de Redivosite (sin entrada OEIS en el momento de la publicación):
14,42,44,49,66,70,143,153,168,169,176,195,204,260,287,294,322,350,414,462,518,553,572,575,592,629,651,702,726,735,775,806,850,869,889,891,913,950,1014,1023,1027,1071,1118,1173,1177,1197,1221,1235,1254,1260,1302,1364,1403,1430,1441,1554,1598,1610,1615,1628,1650,1673,1683,1687,1690,1703,1710,1736,1771,1840,1957,1974,2046,2067,2139,2196,2231,2254,2257,2288,2310,2318,2353,2392,2409,2432,2480,2522,2544,2635,2640,2650,2652,2684,2717,2758,2760,2784,2822,2835
Ejemplos
- N = 13 : 13 es primo, entonces 13 no es un número de redivosita
- N = 32 : 32/2 + 3 = 19; 19 no es un divisor o 32, entonces 32 no es un número de redivosita
- N = 260 : 260/2 + 3 = 133, 133/7 + 8 = 27, 27/3 + 4 = 13; 13 es un divisor o 260, entonces 260 es un número de redivosita
Tu tarea
- Dado un número entero N , devuelve un valor verdadero si es un Número de redivosita o un valor falso de lo contrario. (También puede generar dos valores distintos, siempre que sean coherentes).
- Se garantiza que la entrada sea mayor que 6 .
- Este es el código de golf , por lo que gana la respuesta más corta en bytes.
code-golf
decision-problem
integer
division
Arnauld
fuente
fuente
a(n)
directamente o porque puedes calcular un término de los anteriores). Gracias, Arnauld, por cambiar el desafío. :)Respuestas:
Haskell,
918583807574 bytesPruébalo en línea!
Editar: -2 bytes gracias a @BMO, -3 bytes gracias a @ H.PWiz y
-5-6 bytes gracias a @ Ørjan Johansenfuente
Casco , 14 bytes
Pruébalo en línea!
-3 gracias a H.PWiz .
fuente
Ω
Γ
...Γ
, dada una lista [a, b, c ...] se aplicará~+→Π
aa
y[b,c...]
.~+→Π
agregaa+1
aproduct[b,c...]
.a
es el divisor más pequeño,product[b,c...]
esN/d
C (gcc) ,
9489 bytesPruébalo en línea!
Explicación
fuente
Jalea , 14 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 2 ,
9791 bytesPruébalo en línea!
Salidas a través del código de salida.
Sin golf:
Pruébalo en línea!
fuente
05AB1E ,
1716 bytesPruébalo en línea!
Explicación
fuente
Pyth , 20 bytes
Pruébalo aquí!
Cómo funciona
Y los primeros 4 bytes (
<P_Q
) solo verifican si la entrada no es primo.Con la ayuda de Emigna , logré guardar 3 bytes.
fuente
head(P)
lugar de lafiITZ2
parte, ya que el divisor más pequeño mayor que 1 siempre será primo?Python 3 , 149 bytes
Pruébalo en línea!
Usando un enfoque de tamiz. Debe ser rápido (
O(N log log N)
= complejidad de tiempo del tamiz de Eratóstenes) incluso con grandesN
(pero almacenaO(N)
enteros en la memoria)Nota:
n
no excedenN
, yN > 7
p
pueden estar enrange(2,N)
lugar derange(2,N+1)
tamizar./
no funciona,//
debe usarse, debido al índice de la lista.range
en otra variable no ayuda, desafortunadamente.Explicación:
-~N
==N+1
.s
se inicializa conN+1
ceros (Python es indexación 0, por lo que los índices son0..N
)s[n]
se espera que sea0
sin
es un primo, yp
parap
el primo mínimo que dividen
sin
es un compuesto.s[0]
y loss[1]
valores no son importantes.Para cada uno
p
en rango[2 .. N-1]
:s[p] < 1
(es decirs[p] == 0
), entoncesp
es primo, y para cada unoq
es múltiplo dep
ys[q] == 0
, asignars[q] = p
.Las últimas 2 líneas son sencillas, excepto que
n//s[n]-~s[n]
==(n // s[n]) + s[n] + 1
.Python 3 , 118 bytes
Pruébalo en línea!
A costa de un rendimiento ligeramente peor. (Este se ejecuta en
O(N log N)
complejidad de tiempo, suponga una implementación razonable de los segmentos de Python)El programa completo equivalente es de 117 bytes .
fuente
n//s[n]-~s[n]
lugar den//s[n]+s[n]+1
149 bytes.or p
puede ser|p
or p
realiza lógica o, mientras|p
realiza bit a bit o. Es decir,a or b
esb if a == 0 else a
.for
para usar un segmento en lugar de otrofor
. Serange
invierte, por lo que los índices más bajos sobrescribirán los más grandes, y comenzar el corte en2*p
no reemplazarás[0]
os[p]
.Haskell , 110 bytes
Pruébalo en línea!
No muy feliz...
fuente
Octava , 92 bytes
Pruébalo en línea!
fuente
APL (Dyalog) , 50 bytes
Pruébalo en línea!
fuente
Japt,
2524 bytesMe temo que podría haber ido en la dirección equivocada con esto, pero me he quedado sin tiempo para intentar un enfoque diferente.
Salidas
0
para falso o1
para verdadero.Intentalo
fuente
Perl 5 , 291 + 1 (-a) = 292 bytes
Maldita sea Perl por no tener un primer inspector nativo.
Versión sin golf,
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) , 64 bytes
Implementación sencilla con reemplazo de patrón recursivo
(reemplazar "\ [Divide]" con el símbolo "∣" ahorra 7 bytes)
Pruébalo en línea!
fuente
Limpias ,
128117114 bytesPruébalo en línea!
fuente
J , 35 bytes
Pruébalo en línea!
El divisor mínimo es el primer factor primo robado de la solución Jelly de @ Dennis (anteriormente estaba usando
<./@q:
).Debería haber una mejor manera de hacer la iteración, pero parece que no puedo encontrarla. Pensé en evitar hacer la prueba de primalidad (
^:(0&p:)
) y en su lugar usar adversidad, pero parece que será un poco más largo ya que necesitará_2{
algunos cambios que podrían no dar una reducción neta.Realmente siento que también debe haber una manera de evitar tener padres en torno al control de primalidad.
Explicación (expandida)
fuente
NARS APL, 43 caracteres, 85 bytes
(esperando que converja para todos los números> 6) prueba:
La idea de usar 2 funciones anónimas llego a otra solución Apl.
fuente
Pyt , 44 bytes
Consulte el siguiente código para obtener una explicación: las únicas diferencias son (1) que N se disminuye antes para tener en cuenta el incremento al comienzo del ciclo, y (2) usa NOR en lugar de OR.
Pruébalo en línea!
Hice esto antes de volver a leer la pregunta y me di cuenta de que solo quería un verdadero / falso.
Pyt, 52 bytes
Imprime una lista infinita de números Redivosite.
Explicación:
Pruébalo en línea!
fuente