Podemos definir la racha k
de divisibilidad de un número n
al encontrar el número entero no negativo más pequeño de k
tal manera que n+k
no sea divisible entre k+1
.
Reto
En el idioma que elija, escriba un programa o función que genere o devuelva la Racha de divisibilidad de su entrada.
Ejemplos:
n=13:
13 is divisible by 1
14 is divisible by 2
15 is divisible by 3
16 is divisible by 4
17 is not divisible by 5
La racha de divisibilidad de 13
es4
n=120:
120 is divisible by 1
121 is not divisible by 2
La racha de divisibilidad de 120
es1
Casos de prueba:
n DS
2 1
3 2
4 1
5 2
6 1
7 3
8 1
9 2
10 1
2521 10
Más casos de prueba se pueden encontrar aquí .
Notas
- Basado en el problema del proyecto Euler 601
- Esta secuencia se puede encontrar en OEIS , desplazada hacia abajo por 1.
Reglas
- Puede suponer que la entrada es mayor que 1.
Tanteo
code-golf : gana la presentación con la puntuación más baja.
k + 1
es 2, dondek
es el entero positivo más pequeño. Perdón por la trampa.k
que no se dividen-1
?n=7
dondek=3
:n-1
es divisible pork
.+1
.Respuestas:
Pyth ,
65 bytesPruébalo en línea!
fuente
Java 8,
44424139 bytesTachado 44 sigue siendo regular 44; (
-2 bytes gracias a @LeakyNun .
-1 byte gracias a @TheLethalCoder .
-2 bytes gracias a @Nevay .
Explicación:
Pruébalo aquí.
fuente
Haskell , 35 bytes
Pruébalo en línea!
El uso
until
también es de 35 bytesfuente
Casco , 7 bytes
Pruébalo en línea!
fuente
05AB1E ,
76 bytesPruébalo en línea!
Soluciones alternativas de 7 bytes:
<DLÖγнg
Ls<ÑKн<
fuente
JavaScript (ES6), 28 bytes
Pruébalo
fuente
Mathematica,
3027 bytesUna función sin nombre que toma un argumento entero.
Pruébalo en Wolfram Sandbox
Uso:
fuente
Perl 5 ,
2321 + 1 (-p) = 22 bytesPruébalo en línea!
fuente
Python 2 , 35 bytes
Pruébalo en línea!
fuente
Cubix , 17 bytes
Pruébalo en línea!
Cubified
I1
configurar la pila con entrada y divisor%?
hacer mod y probar;)qU)uqU
si 0 elimina el resultado e incrementa la entrada y el divisor. Un poco de una ronda sobre el camino para volver a%
/;(O@
si no es 0, descartar resultado, decrementar divisor, salida y salirMíralo correr
fuente
Python 2 ,
4341 bytes¡Ahorré 2 bytes gracias a Leaky Nun !
Pruébalo en línea!
Python 2 , 40 bytes
Pruébalo en línea!
fuente
Python 2 ,
4440 bytes-4 bytes gracias a Leaky Nun.
Pruébalo en línea!
fuente
Swift 4 , 56 bytes
Esta es una función completa
f
, con un parámetro enteroi
que imprime la salida.Pruébalo aquí.
Swift 4 , 56 bytes
Esta es una función anónima, que devuelve el resultado.
Pruébalo aquí.
¡Mira la suite de prueba!
fuente
C # (Mono) ,
4139 bytesEsencialmente un puerto de la respuesta Java 8 de @Kevin Cruijssen con más golf.
Pruébalo en línea!
fuente
dc , 28 bytes
Pruébalo en línea!
Esto se siente realmente subóptimo, con el incremento y la disminución final, pero realmente no puedo ver una manera de mejorarlo. Básicamente, simplemente incrementamos un contador
i
y nuestro valor inicial siempre que el mod de valori
continúe siendo cero, y una vez que eso no sea cierto, restaremos unoi
e imprimiremos.fuente
Gaia , 8 bytes
Pruébalo en línea!
Explicación
fuente
J, 17 bytes
Pruébalo en línea!
Creo que todavía hay espacio para jugar golf aquí.
Explicación (sin golf)
El cap (
[:
) está ahí para asegurarse de que J no trate el último verbo ({.@I.
) como parte de un gancho.Lo único extraño de esta respuesta es que en
I.
realidad duplica el índice de cada número distinto de cero tantas veces como el valor de ese número. p.ejPero no importa, ya que queremos el primer índice de todos modos (y dado que
i.
da un rango ascendente, sabemos que el primer índice será el valor más pequeño).Finalmente, aquí hay una prueba muy breve de que es válido verificar la división solo hasta
n
.Comenzamos a verificar la divisibilidad con
1 | n
, por lo que suponiendo que la racha llegue tan lejos, una vez que lleguemos a verificar la divisibilidad porn
lon | 2n - 1
que nunca será cierto (2n - 1 ≡ n - 1 (mod n)
). Por lo tanto, la racha terminará allí.fuente
Japt , 7 bytes
¡Pruébelo en línea!
fuente
Código de máquina x86, 16 bytes
La función anterior toma un solo parámetro,,
n
en elECX
registro. Calcula su racha de divisibilidadk
, y la devuelve a través delEAX
registro. Se ajusta a la convención de llamadas de llamada rápida de 32 bits , por lo que se puede llamar fácilmente desde el código C utilizando compiladores Microsoft o Gnu.La lógica es bastante simple: solo hace una prueba iterativa a partir de 1. Es funcionalmente idéntica a la mayoría de las otras respuestas aquí, pero optimizada a mano para el tamaño. Un montón de buenos instrucciones de 1 byte allí, incluyendo
INC
,DEC
,CDQ
, yXCHG
. Los operandos codificados para la división nos hirieron un poco, pero no tanto.Pruébalo en línea!
fuente
PHP , 34 bytes
Pruébalo en línea!
Suficientemente simple. Comprueba el resto de la división (mod) de cada ciclo mientras incrementa cada valor, sale cuando el número ya no es divisible.
fuente
SOGL V0.12 , 8 bytes
Pruébalo aquí!
No está mal para un idioma que está hecho para un tipo completamente diferente de desafíos.
Explicación:
fuente
Mathematica, 40 bytes
Pruébalo en línea! (Matemáticas)
Enfoque matemático, n + k es divisible por k + 1 si y solo si n-1 es divisible por k + 1. Y n-1 no es divisible por n, también lo
Range@#
son los números.Originalmente tengo la intención de usar
Min@Complement[Range@#,Divisors[#-1]]-1&
, pero esto también funciona.fuente
Julia 0.6.0
(47 bytes)(38 bytes)n->(i=1;while isinteger(n/i) i+=1;n+=1 end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
Pruébalo en línea!
Se recortaron 9 bytes gracias a Mr.Xcoder
fuente
n->(i=1;while isinteger(n/i) i+=1;n+=1end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
C (gcc) , 34 bytes
Pruébalo en línea!
fuente
i--
lugar den=i-1
Lote, 70 bytes.
Todo lo que está haciendo es encontrar el más grande
i
queLCM(1..i)
dividen-1
.fuente
R , 43 bytes
Función anónima.
¡Verifique todos los casos de prueba!
fuente
Aceto ,
2827 bytesPodría guardar un byte si no tengo que salir.
Explicación:
Usamos tres pilas: la pila izquierda contiene un contador que comienza en 2, la derecha contiene el número dado (o sus incrementos), la pila central se usa para realizar las operaciones de módulo. Podríamos, por supuesto, hacer todo en una pila, pero de esta manera podemos configurar las pilas externas para que sean "fijas" (los valores que aparecen no se eliminan realmente) y ahorrarnos muchas operaciones de duplicación. Aquí está el método en detalle:
Lea un número entero, increméntelo, haga que la pila actual sea pegajosa y "muévala" (y a nosotros mismos) a la pila a la izquierda:
Vaya una pila más hacia la izquierda, presione un literal 2, haga que esta pila sea pegajosa también. Recuerde esta posición en el código (
@
), y "mueva" un valor y nosotros a la pila central nuevamente.Ahora probamos: ¿El módulo de los dos números superiores no es 0? Si es así, salte hasta el final, de lo contrario, vaya una pila hacia la derecha, incremente y empuje el valor y nosotros hacia el medio. Luego vaya a la pila izquierda, increméntela también y salte de nuevo a la marca que establecimos antes.
Cuando el resultado del módulo no fue cero, invertimos la posición en la que se mueve la IP, vamos una pila hacia la izquierda (donde vive nuestro contador), decrementamos e imprimimos el valor, luego salimos.
fuente
Ruby,
343231 bytesUna lambda recursiva. Todavía es nuevo en Ruby, así que las sugerencias son bienvenidas.
Pruébalo en línea!
fuente
F #,
86 bytes84 bytesPruébalo en línea!
Editar: -2 personajes de Oliver
fuente
r = if
?Befunge , 19 bytes
Pruébalo en línea!
fuente