Todas las raíces primitivas módulo n
Esta calculadora de todas las raíces primitivas módulo n devuelve el conjunto completo y ordenado de generadores del grupo multiplicativo de unidades módulo un entero n.
Ejecutar — gratis
Primero determina si el módulo pertenece a una familia que admite raíces primitivas; después calcula el totiente de Euler, encuentra un generador y obtiene los demás. La respuesta incluye el módulo, el totiente, la cantidad y la lista íntegra de raíces. Los valores inferiores a dos y los módulos sin raíces primitivas producen un error claro. La misma aritmética determinista permite comprobaciones rápidas y automatización reproducible mediante API por $0.002 en cada solicitud correcta.
Qué significa la lista completa de raíces primitivas
Una raíz primitiva módulo n es un residuo cuyas potencias sucesivas generan cada clase invertible módulo n. La palabra decisiva es «cada»: un número puede ser coprimo con n y recorrer solo un subgrupo propio, por lo que ser una unidad es necesario, pero no suficiente. La capacidad devuelve todos los representantes positivos entre 1 y n menos 1 cuyo orden multiplicativo es exactamente phi(n). Para el módulo 14, por ejemplo, el grupo de unidades tiene seis elementos y el conjunto completo de generadores contiene dos residuos. La respuesta indica n, el totiente de Euler phi, la cantidad de raíces primitivas y el arreglo primitive_roots ordenado numéricamente. La cantidad permite comprobar el resultado: si existen raíces primitivas, hay phi(phi(n)). El módulo especial 2 tiene correctamente la única raíz 1. Si ningún elemento genera todo el grupo, se rechaza el módulo; una lista vacía ocultaría que el grupo no es cíclico.
Cómo se comprueban la existencia y cada generador
No todos los módulos admiten raíces primitivas. El teorema de clasificación establece que el grupo multiplicativo módulo n es cíclico exactamente cuando n es 2, 4, una potencia de primo impar o el doble de una potencia de primo impar. La calculadora factoriza n y verifica esa condición antes de buscar. Para un módulo admisible calcula phi(n), factoriza el orden del grupo y prueba unidades candidatas mediante exponenciación modular. Un candidato g tiene orden completo phi(n) si, para cada divisor primo distinto q de phi(n), g elevado a phi(n) dividido por q no es congruente con 1 módulo n. Conocido un g, todas las raíces son sus potencias g elevado a k donde k es coprimo con phi(n). La implementación enumera esos exponentes, calcula residuos exactos y ordena el resultado. No usa azar, tablas externas, red ni hora actual; una misma entrada siempre produce el mismo contenido numérico.
Cómo utilizar el resultado en matemáticas y software
Las listas completas sirven cuando un problema pide más que la menor raíz primitiva. El alumnado puede comparar los residuos devueltos con tablas de potencias hechas a mano y comprobar por qué el número de generadores es phi(phi(n)). El profesorado puede preparar soluciones que acepten todas las respuestas válidas. Quienes desarrollan software pueden crear datos de prueba para rutinas de orden multiplicativo, validar código de enumeración o seleccionar un generador según una regla posterior. Los errores también enseñan: los módulos 8 y 15 muestran que muchos compuestos conocidos tienen grupos de unidades no cíclicos aunque contengan numerosos residuos invertibles. La entrada se limita a 10,000 porque la salida es exhaustiva y puede contener muchas raíces; así el tiempo, la representación en el navegador y el tamaño de la API siguen siendo previsibles. Introduzca n como entero o cadena decimal simple. Cada solicitud correcta cuesta $0.002; los datos no admitidos o mal formados se identifican claramente.
Qué puede hacer con ella
Comprobar un ejercicio de teoría de números
Compare un cálculo manual con el conjunto completo y ordenado de generadores módulo n.
Generar casos de prueba deterministas
Cree valores esperados exactos para código que calcula órdenes multiplicativos o grupos cíclicos de unidades.
Enseñar grupos de unidades cíclicos y no cíclicos
Contraste módulos admisibles con valores que no pueden tener raíz primitiva y explique el teorema de clasificación.
Preguntas frecuentes
¿Cuánto cuesta una solicitud de API?
Una solicitud correcta de API cuesta $0.002. Una entrada no válida devuelve un error, no una lista de raíces.
¿Qué módulos tienen raíces primitivas?
Exactamente 2, 4, las potencias de primos impares y el doble de esas potencias. Los demás se rechazan porque sus grupos de unidades no son cíclicos.
¿Por qué un residuo coprimo puede no ser una raíz primitiva?
La coprimalidad solo convierte el residuo en unidad. Una raíz primitiva también debe tener el máximo orden multiplicativo posible, phi(n).
¿Cuántas raíces primitivas debe contener el resultado?
Cuando existen, su número es phi(phi(n)). La respuesta incluye la cantidad calculada junto al arreglo.
¿Por qué n está limitado a 10,000?
La salida enumera todos los generadores, por lo que crece con n. El límite mantiene previsibles el cálculo exhaustivo y el tamaño de la respuesta.
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/all-primitive-roots \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":14}'const res = await fetch("https://api.kit.forhosting.com/numth/all-primitive-roots", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 14
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/all-primitive-roots",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 14
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/all-primitive-roots", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":14}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":14}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/all-primitive-roots", 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
{
"n": 14
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.all_primitive_roots",
"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
max_n | 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. |