Contar raíces primitivas módulo n
Módulo 18 hay exactamente 2 raíces primitivas, el resultado de aplicar dos veces el indicador de Euler. Escriba un módulo y verá cuántos generadores tiene, o un aviso claro cuando no tiene ninguno, como ocurre con el 8. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- N
- 18
- Módulo
- 18
- Cantidad de raíces primitivas
- 2
Este contador determina si un módulo admite raíces primitivas y, cuando las admite, devuelve su cantidad exacta. El resultado es el indicador de Euler del indicador de Euler del módulo, que se escribe phi(phi(n)). La calculadora cubre toda la familia de módulos válidos, sin suponer que la entrada sea prima. Si el módulo pertenece a una clase sin raíces primitivas, presenta un error claro en lugar de devolver un cero engañoso.
Qué representa el recuento
Una raíz primitiva módulo n es una clase de residuos cuyas potencias sucesivas generan todas las clases invertibles módulo n. En términos de grupos, es un generador del grupo multiplicativo de los enteros módulo n. Esta herramienta responde una pregunta precisa: ¿cuántas clases de residuos distintas generan ese grupo?
No enumera los generadores ni busca el menor. Cuando existe una raíz primitiva, el grupo multiplicativo es cíclico y contiene phi(n) elementos. Un grupo cíclico de orden phi(n) tiene exactamente phi(phi(n)) generadores, que es el valor devuelto.
Por ejemplo, módulo 18 los residuos invertibles forman un grupo cíclico de orden 6 y phi(6) es 2, por lo que hay dos raíces primitivas. El recuento se refiere a clases módulo n, no a representantes enteros arbitrarios: dos valores que difieren en un múltiplo de n describen la misma raíz. Por ello, el resultado sirve en demostraciones, ejercicios y algoritmos donde importa el tamaño del conjunto generador más que la identidad de sus elementos.
Qué módulos tienen raíces primitivas
Las raíces primitivas no existen para todo módulo positivo. La clasificación completa establece que solo existen cuando n es 2, 4, una potencia p^k de un primo impar o el doble de una potencia de primo impar, 2p^k. La calculadora factoriza el módulo recibido y aplica este teorema antes de contar.
Esta comprobación es esencial, porque calcular phi(phi(n)) sin verificar la admisibilidad produce un número positivo aunque no haya generadores. Por ejemplo, phi(8) es 4 y phi(4) es 2, pero no existe ninguna raíz primitiva módulo 8; devolver 2 sería matemáticamente incorrecto. Por eso, esta capacidad rechaza ese módulo mediante un error explícito.
Los módulos primos mayores que dos están incluidos como el caso especial p^1, y también se admiten compuestos como 9, 14, 18 y 25. En cambio, 8, 12, 15 y 20 no se admiten. La prueba de clasificación y la fórmula de recuento se mantienen separadas para que la salida siempre represente un conjunto real de raíces primitivas.
Cómo usar e interpretar el resultado
Envíe un entero n entre 2 y 1,000,000,000,000. La entrada debe ser un entero numérico, no una cadena decimal, fracción, aproximación científica, valor negativo ni entero inseguro de JavaScript. El límite superior mantiene la factorización finita y previsible, pero cubre una amplia gama de cálculos docentes y prácticos.
El algoritmo aplica división de prueba determinista para obtener la estructura de potencias primas, verifica el teorema de existencia, calcula phi(n) a partir de los factores primos distintos y después calcula phi(phi(n)). No hace solicitudes de red ni búsquedas aleatorias, por lo que una misma entrada siempre genera la misma salida.
Qué puede hacer con ella
Comprobar un ejercicio de teoría de números
Verifique la cantidad esperada de generadores antes de enumerar manualmente las raíces primitivas.
Dimensionar una búsqueda de generadores
Determine cuántas clases de residuos válidas debería hallar una búsqueda exhaustiva de raíces primitivas.
Validar un módulo admisible
Rechace un módulo cuyo grupo multiplicativo no sea cíclico antes de que otro algoritmo suponga que existe una raíz primitiva.
Preguntas frecuentes
¿Qué fórmula usa la calculadora?
Para un módulo que admite raíces primitivas, devuelve phi(phi(n)), donde phi es el indicador de Euler.
¿Por qué la herramienta devuelve un error en vez de cero?
El contrato distingue un caso matemático no admisible de un recuento válido. Por eso, un módulo sin raíces primitivas se comunica como entrada no válida.
¿Qué módulos admiten raíces primitivas?
Exactamente 2, 4, las potencias p^k de un primo impar y el doble de esas potencias, 2p^k.
¿La herramienta enumera las raíces primitivas?
No. Solo devuelve cuántas clases de residuos son raíces primitivas módulo n.
¿Se admiten módulos primos?
Sí. Todo módulo primo tiene raíces primitivas, incluido 2; los primos impares son casos de potencias de primo impar.
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/count-primitive-roots \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":18}'const res = await fetch("https://api.kit.forhosting.com/numth/count-primitive-roots", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 18
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/count-primitive-roots",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 18
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/count-primitive-roots", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":18}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":18}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/count-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": 18
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.count_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.
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
Cómo usar e interpretar el resultado
La respuesta lo repite en modulus y ofrece la cantidad exacta en primitive_root_count. Interprete una respuesta invalid_input que indique que no hay raíces primitivas como una conclusión matemática sobre el módulo, no como un fallo transitorio. Si necesita las raíces concretas, use una herramienta de búsqueda o enumeración; este endpoint devuelve deliberadamente solo la cardinalidad. Cada solicitud API cuesta $0.002 y usa la misma aritmética exacta.
Preguntas técnicas
¿Cuánto cuesta una solicitud API?
Cada solicitud API cuesta $0.002.