Comprobador de residuo cuadrático
Le dice si un número tiene raíz cuadrada módulo m y enumera todas las raíces: 2 es un cuadrado módulo 7, porque 3 al cuadrado es 9, que deja 2, y las raíces son 3 y 4. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- A
- 2
- Módulo m
- 7
- A mód
- 2
- Raíces
- 3, 4
- N.º de raíces
- 2
Un entero a es residuo cuadrático módulo m cuando algún entero x cumple que x al cuadrado es congruente con a módulo m; en otras palabras, a tiene una raíz cuadrada modular. Esa pregunta de sí o no aparece en deberes de criptografía, teoría de números de concursos y cualquier flujo que deba saber si una congruencia es un cuadrado perfecto antes de invertir esfuerzo en un solucionador mayor. Esta capacidad toma a y un módulo m (al menos dos), reduce a al rango canónico de cero a m menos uno, busca cada raíz en ese rango y puede devolver opcionalmente la lista completa de clases de residuo cuadrático módulo m.
Qué significa la residualidad cuadrática para módulos generales
En teoría elemental de números un residuo cuadrático módulo un primo p suele significar un entero a no divisible por p para el cual la congruencia x al cuadrado igual a a módulo p tiene solución; el cero a menudo se trata aparte como el cuadrado trivial. Para un módulo compuesto m la misma definición se extiende con claridad: a es residuo cuadrático módulo m cuando existe al menos un entero x con x al cuadrado congruente con a módulo m, incluido el caso a congruente con cero.
Las soluciones siguen patrones que dependen de la factorización en potencias primas de m; por ejemplo módulo un primo hay cero o dos raíces no nulas por cada clase de residuo no nula que es un cuadrado, mientras que los módulos compuestos pueden admitir más raíces. Herramientas clásicas como los símbolos de Legendre y Jacobi dan pruebas rápidas cuando m es un primo impar o cuando solo se necesita un carácter multiplicativo, pero no enumeran por sí solas cada raíz para m arbitrario.
Un barrido directo de x de cero a m menos uno evalúa cada clase de cuadrado exactamente una vez y por tanto responde tanto a la existencia como a la enumeración para cualquier módulo dentro de un tamaño acotado fijo.
Dónde aparecen las comprobaciones de cuadrados modulares en el trabajo real
Los programadores de concursos a menudo necesitan un oráculo rápido antes de invocar Tonelli–Shanks o una combinación CRT de raíces en potencias primas: si el bit de residuo es falso, no tiene sentido construir una raíz cuadrada. Los estudiantes de criptografía verifican ejemplos de cifrados al estilo Rabin, ejercicios de reciprocidad cuadrática y variantes toy de Diffie–Hellman que mencionan símbolos de residuo. Los ingenieros que reconcilian horarios periódicos o experimentos de cubos hash a veces preguntan si un paso es una clase de cuadrado módulo un período compuesto.
Si solo necesita un sí o no al estilo del símbolo de Legendre para un primo grande más allá del límite de barrido, factorice o reduzca primero; dentro del tope esta página es la respuesta constructiva completa.
Qué puede hacer con ella
Comprobaciones de deberes y concursos
Decida si a es un cuadrado módulo m y lea cada raíz en 0..m-1 para ejercicios de teoría de números sin construir un solucionador CRT completo.
Prefiltro antes de extraer raíces
Rechace no residuos temprano en una tubería que de otro modo intentaría algoritmos de raíz cuadrada modular en módulos compuestos o primos.
Preguntas frecuentes
¿Qué es un residuo cuadrático módulo m?
Un entero a es residuo cuadrático módulo m si existe un entero x tal que x² ≡ a (mod m). Esta herramienta informa ese hecho y enumera cada tal x en 0..m-1.
¿Por qué m debe ser al menos 2?
El módulo 0 no está definido para congruencias en esta superficie de producto, y el módulo 1 colapsa todo entero a una sola clase.
¿Qué tamaño de módulo se admite?
m debe ser un entero de 2 a 1,000,000 inclusive. El candidato a puede ser cualquier entero seguro; se reduce módulo m antes del barrido.
¿Cuánto cuesta?
La herramienta del navegador es gratuita y se ejecuta en local.
¿Es 3 un residuo cuadrático módulo 7?
No. Al elevar al cuadrado cada resto módulo 7 solo se obtiene 0, 1, 2 o 4, así que ningún entero al cuadrado deja 3, y la lista de raíces sale vacía.
Herramientas relacionadas
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/quadratic-residue \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":2,"m":7}'const res = await fetch("https://api.kit.forhosting.com/numth/quadratic-residue", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": 2,
"m": 7
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/quadratic-residue",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": 2,
"m": 7
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/quadratic-residue", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":2,"m":7}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":2,"m":7}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/quadratic-residue", 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
{
"a": 2,
"m": 7
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.quadratic_residue",
"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_m | 2 |
max_m | 1000000 |
max_abs_a | 9007199254740991 |
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. |
Notas técnicas
Qué significa la residualidad cuadrática para módulos generales
Ese enfoque exhaustivo es lo que implementa este extremo: solo aritmética entera determinista, sin redondeo en coma flotante, y una forma JSON estable que puede afirmar en pruebas.
Contrato de entrada, límites y campos de respuesta
Envíe enteros a y m. Comprobaciones típicas de clase: dos es residuo cuadrático módulo siete porque tres al cuadrado es nueve que es dos mód siete, y las raíces son tres y cuatro; tres no es residuo cuadrático módulo siete. Los no enteros, los campos obligatorios vacíos y los módulos por encima del tope fallan la validación con un mensaje claro que nombra el campo. El módulo m debe ser al menos dos y como máximo un millón; los valores por debajo de dos se rechazan con invalid_input y no se cobran, porque la aritmética modular con módulo cero o uno no es una superficie de producto admitida. El candidato a puede ser negativo o mayor que m; se reduce a a_mod en el intervalo semiabierto de cero inclusive a m exclusive antes de la búsqueda de cuadrados. El booleano opcional list_residues (alias list_all y all_residues) pide cada valor distinto de x al cuadrado módulo m, ordenado ascendente, junto con residue_count. En caso de éxito la carga siempre incluye a, m, a_mod, is_quadratic_residue, roots como la lista completa de soluciones en cero a m menos uno, y root_count. Cuando list_residues es verdadero para m igual a siete se obtienen las clases ordenadas cero, uno, dos y cuatro — la imagen del mapa de elevación al cuadrado en el anillo de enteros módulo siete.
Dónde aparecen las comprobaciones de cuadrados modulares en el trabajo real
Los docentes asignan problemas como listar todos los residuos cuadráticos módulo veintiuno o decidir si cinco es un cuadrado módulo trece y quieren una respuesta JSON determinista en lugar de una tabla a mano que puede contener errores de uno. Como la capacidad es un motor de parse puro no hay deriva de modelo, ni clave API externa, ni estado almacenado: el mismo par siempre produce las mismas raíces y la misma lista opcional de residuos. El precio de la API es la base publicada de $0.002 por ítem exitoso; la validación fallida no consume saldo.
Casos de integración
Enumerar clases de residuo
Active list_residues para obtener la imagen ordenada del mapa de elevación al cuadrado módulo m para tablas, diapositivas didácticas o pruebas basadas en propiedades.
Preguntas técnicas
¿Se considera 0 un residuo cuadrático?
Sí. 0² ≡ 0 (mod m), así que a_mod = 0 siempre es un residuo e incluye la raíz 0 (y posiblemente otras para m compuesto).