Introducción:
Accidentalmente corrompiste el flujo del tiempo con un dispositivo que hiciste por diversión, que resultó ser una máquina del tiempo. Como resultado, te empujaron al futuro lejano. Te diste cuenta de que la informática, la potencia de procesamiento y las computadoras en general han evolucionado en gran medida, una cantidad infinita para ser precisos . Entonces, se toma una computadora con memoria infinita y potencia de procesamiento. No tienes idea de cómo puede tener memoria infinita y poder de procesamiento infinito, pero simplemente lo aceptas y regresas al presente.
Desafío:
Escuchaste que la persona que descubrió la prima más grande en la actualidad 2^74,207,281 − 1
recibió $ 100,000. Decide hacer un programa que encuentre la próxima prima, ya que desea recuperar el dinero que gastó en la computadora. Haces uno que toma la entrada de un número y encuentra el siguiente número primo, ya sea por fuerza bruta o por cualquier otro método.
Aclaraciones:
tiene una máquina hipotética con memoria infinita y potencia de procesamiento. Su programa NO DEBE estar limitado (por ejemplo: los int. De C # pueden almacenar de -2,147,483,648
a 2,147,483,647
), bueno, su programa debe poder almacenar y trabajar con cualquier número de cualquier tamaño. Tiene recursos infinitos, por lo que no debería importarle si se quedaría sin memoria si lo permitiera.
Ejemplo de E / S:
Entrada: El primo descubierto más grande actualmente con 22,338,618 dígitos.
Salida: exactamente la próxima prima
Obviamente, no tiene que demostrar que funciona, ya que tomaría mucho tiempo calcularlo en una máquina física. Pero si movió su programa a una máquina hipotética con capacidad / memoria de procesamiento infinito, debería computar al instante.
Encontrar el próximo primo y verificar si un número es primo son dos cosas completamente diferentes
Respuestas:
Mathematica, 9 bytes
fuente
Python 3 , 45 bytes
Pruébalo en línea!
fuente
k
es igual al resultado final,m
contiene(k-1)!^2
. ¡Desde (k-1)! = -1 mod k solo se cumple cuando k es primo, ¡tenemos (k-1)! (K-1)! = 1 mod k, que cuando se multiplica por k será k mismo. ¡Calcula el cuadrado para deshacerse de la única excepción de (k-1)! = 0 mod k para k compuesto, que ocurre para k = 4. ¿Correcto?RecursionError: maximum recursion depth exceeded in comparison
paraf(1000)
RecursionError
.Python 2,
78777674 bytes-1 byte gracias a @KritixiLithos
-1 byte gracias a @FlipTack
-2 bytes gracias a @ElPedro
fuente
n%i<1
es más corto quen%i==0
if
.<1
n+=1
yif
en pestañas y guardar 2 bytesJalea , 2 bytes
Pruébalo en línea!
Esto toma implícitamente la entrada z y, de acuerdo con el manual, genera la prima más cercana estrictamente mayor que z.
fuente
Oasis , 2 bytes
Corre con la
-n
bandera.Código:
Pruébalo en línea!
fuente
Bash + coreutils, 52 bytes
Pruébalo en línea!
La documentación para bash y factor no especifica un valor entero máximo que puedan manejar (aunque, en la práctica, cada implementación tiene un valor entero máximo). Presumiblemente, en el GNU del futuro en sus máquinas infinitamente grandes, bash y factor tendrán enteros de tamaño ilimitado.
fuente
Máximo, 10 bytes
Una función devuelve el primo más pequeño más grande que su argumento.
fuente
Brachylog , 2 bytes
Pruébalo en línea!
Explicación
fuente
Python con sympy, 28 bytes
sympy.nextprime
es una función que hace lo que dice en la lata. Funciona para todas las carrozas.repl.it
Python,
6659 bytes-4 bytes gracias a Lynn (uso
-~
)-3 bytes gracias a FlipTack (uso
and
yor
, permitiendo...==1
cambiar a una...-1
condición).repl.it
Una función recursiva que cuenta hasta que
n
se encuentra un primo al probar que solo existe un número hastan-1
que lo divide (es decir, 1). Funciona para todos los enteros, genera un error para las carrozas.Funciona en 2.7.8 y 3.5.2, no funciona en 3.3.3 (error de sintaxis debido a la falta de espacio entre
==1
yelse
)fuente
(n+1)%(i+1)
es-~n%-~i
, creo.and
/or
trabajo, comof=lambda n:sum(-~n%-~i<1for i in range(n))==1and-~n or f(n+1)
?f=lambda n:sum(-~n%-~i<1for i in range(n))-1and f(n+1)or-~n
Python,
11483 bytesSin incorporaciones, si las hay.
-30 eliminando espacios en blanco y -1 cambiando
b%i==0
ab%i<1
fuente
1
Perl 6 , 25 bytes
Cómo funciona
Perl 6 , 32 bytes
Con ineficaces pruebas de primalidad personalizadas.
Cómo funciona
La estructura externa es la misma que la anterior, pero el predicado pasado a
first
(para decidir si un número dado es primo), ahora es:fuente
.is-prime
;)Pyke,
87 bytesPruébalo aquí!
4 bytes, sin competencia
(Intérprete actualizado desde el desafío publicado)
Pruébalo aquí!
fuente
J, 4 bytes
Simple incorporado para el próximo prime.
fuente
05AB1E ,
1613 bytes (Emigna @ -3 bytes)Pruébalo en línea!
fuente
[>Dp#
funcionaria?Perl, 30 bytes (29 +1 para
-p
):Uso
Ingrese el número después de presionar Retorno (ingrese 12345 en el ejemplo a continuación, salidas 12347):
Cómo funciona
1
's que tenga longitud++$_
, donde$_
inicialmente es el valor de entrada1
s es de longitud no principal (explicado aquí ).++$_
)while
bucle implícito sale e-p
imprime el valor de$_
"1"
de borde de longitud 1 porque nunca se usará para valores menores que1
, según la especificación.fuente
Java 7,
373343334303268 bytes-75 bytes gracias @Poke
Sin golf:
Pruébalo aquí.
Algunos ejemplos de entradas / salidas:
fuente
static
para el campo y el métodop
, pero eliminando el métodoc
yp
el parámetro.QBIC , 34 bytes
Basado en este probador de primalidad QBIC . Explicación:
fuente
JavaScript (ES7), 61 bytes
Uso
Salida
fuente
MATL, 3 bytes
La función
Yq
devuelve el próximo primo del valor absoluto de la entrada si la entrada es negativa, por lo que implícitamente tomamos la entrada, la negamos (_
) y encontramos el siguiente primo usandoYq
.Pruébalo en línea!
fuente
Haskell,
424643 bytesEl código habitual para la fuerza bruta.
Por supuesto, esto encuentra el siguiente número primo más pequeño después de
n
. No hay mayor prima.Funciona para n > 0 .
editar: Asume que
n
es primo. Gracias al consejo de @Laikoni en los comentarios .fuente
head[...]
con[...]!!0
. Sin embargo, creo que se puede suponer quen
es primo, por lo que puede usar en[n..]
lugar de[n+1..]
y luego tomar el segundo elemento con[...]!!1
.SimpleTemplate, 132 bytes
El algoritmo es terrible, ya que tengo que hacer mi propio código para verificar si un número es primo o no.
Resultó ser horrible, pero funciona.
Recibe el número como primer argumento, generando el resultado.
Sin golf:
¿Algún consejo sobre cómo eliminar eso último
@if
?fuente
Lua, 876 bytes
Lua, a diferencia de otros idiomas, tiene un tamaño entero máximo. Una vez que un número sea mayor que 2 32 , las cosas dejan de funcionar correctamente y Lua comienza a intentar hacer estimaciones en lugar de valores exactos.
Como tal, tuve que implementar un nuevo método para almacenar números, en particular, los almacené como cadenas Base10, porque Lua no tiene un límite de tamaño en las cadenas, que no sea el tamaño de la memoria.
Siento que esta respuesta es mucho más al espíritu de la pregunta, ya que tiene que implementar enteros de precisión arbitrarios, así como una prueba principal.
Explicado
Aunque lo anterior usa Metatables, en lugar de solo funciones regulares como la respuesta real, que resultó más pequeña.
fuente
Rubí, 28 + 6 = 34 bytes
Usa la
-rprime
bandera.Versión no recursiva para 31 + 6 = 37 bytes:
fuente
Python + primefac ,
3432 bytesNo es tan corto como usar
sympy
(otra respuesta ya lo usa), pero sigue siendo bastante corto y es mucho más rápido.Pruébalo en línea
La entrada de
2**2000
completa en un par de segundos.fuente
Japt, 6 bytes
Ejecútalo en línea.
fuente