Verificador de primos de Mersenne con Lucas-Lehmer
Este verificador de primos de Mersenne recibe un exponente primo p y determina si el número 2^p - 1 es primo.
Ejecutar — gratis
Aplica Lucas-Lehmer, la prueba determinista especializada en números de Mersenne, y devuelve el número exacto, el total de iteraciones y el residuo final. Primero valida el exponente, pues uno compuesto jamás genera un primo de Mersenne. Esta separación permite distinguir una solicitud inválida de una prueba válida cuyo resultado es compuesto.
Elija y valide el exponente
Introduzca un exponente entero p entre 2 y 10,000. El verificador admite el campo p y el alias exponent, incluso como cadena entera para clientes orientados a texto. Antes de construir el número, comprueba mediante división de prueba determinista que p sea primo. Es una condición matemática necesaria: si p es compuesto, 2^p - 1 posee una factorización algebraica. Por ello, ese caso genera un error de entrada y no un resultado falso. Así, falso significa que se examinó correctamente un exponente primo, mientras que un error señala que la solicitud no pertenece al dominio de Lucas-Lehmer. También se rechazan decimales, campos ausentes, matrices, textos no numéricos y valores fuera del intervalo publicado.
Comprenda el cálculo de Lucas-Lehmer
Tras validar p, el sistema forma M = 2^p - 1 con aritmética BigInt exacta. Para un primo impar comienza con s = 4 y sustituye repetidamente s por su cuadrado menos 2, reducido módulo M. Realiza exactamente p - 2 actualizaciones. El teorema de Lucas-Lehmer establece que M es primo si y solo si el residuo final es cero. No intervienen redondeos, testigos probabilísticos, servicios de red ni semillas aleatorias. El caso p = 2 corresponde a M = 3, no necesita pasos y devuelve residuo cero. La respuesta incluye el número decimal exacto, la decisión, el método, las iteraciones y el residuo final para que usted pueda reproducir y auditar el cálculo.
Interprete y utilice el resultado
Lea is_prime como la decisión sobre el número de Mersenne, no sobre el exponente, que ya fue validado. Un valor verdadero indica residuo final cero; uno falso indica que p era primo pero 2^p - 1 era compuesto, algo frecuente porque la primalidad de p no basta. Los campos mersenne y final_residue son cadenas decimales para evitar pérdidas de precisión en JSON. La herramienta sirve para prácticas educativas, datos de regresión, demostraciones y comprobaciones matemáticas acotadas. No realiza búsquedas ilimitadas: evalúa un exponente por solicitud y limita su tamaño. El navegador usa la misma lógica determinista que la API; cada llamada automatizada cuesta $0.002. Como el resultado nunca cambia, conviene almacenarlo en caché en sistemas de gran volumen.
Qué puede hacer con ella
Verificar un exponente candidato
Confirme si el número de Mersenne asociado a un exponente primo satisface exactamente el criterio de Lucas-Lehmer.
Enseñar recurrencia modular
Muestre cómo los cuadrados modulares repetidos terminan en un residuo cero o distinto de cero.
Crear datos de prueba deterministas
Genere valores, iteraciones y residuos estables para validar otra implementación.
Preguntas frecuentes
¿Qué ocurre si p es compuesto?
La solicitud devuelve un error de entrada inválida porque p debe ser primo.
¿Un exponente primo garantiza un primo de Mersenne?
No. Es necesario pero no suficiente; el residuo de Lucas-Lehmer proporciona la decisión final.
¿Por qué el número y el residuo son cadenas?
Pueden superar el intervalo entero exacto de JSON, por lo que las cadenas conservan todos los dígitos.
¿La prueba es probabilística?
No. Lucas-Lehmer es determinista para números de Mersenne con exponentes primos.
¿Cuánto cuesta una comprobación por API?
Cada solicitud cuesta $0.002. La versión del navegador usa el mismo cálculo puro.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/numth/mersenne-prime-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"p":31}'const res = await fetch("https://api.kit.forhosting.com/numth/mersenne-prime-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"p": 31
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/mersenne-prime-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"p": 31
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/mersenne-prime-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"p":31}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"p":31}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/mersenne-prime-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"p": 31
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.mersenne_prime_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
min_p | 2 |
max_p | 10000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |