返回技能列表

solve-modular-arithmetic

pjt222
更新于 2 days ago
1 次查看
17
2
17
在 GitHub 上查看
其他api

关于

This skill solves modular arithmetic problems including linear congruences, Chinese Remainder Theorem systems, and modular inverses using both manual methods and computational approaches. It handles large modular exponentiation, cyclic group operations, and discrete logarithm contexts. Use it when working with number theory problems in cryptography or algorithmic challenges requiring modular computations.

快速安装

Claude Code

推荐
主要方式
npx skills add pjt222/agent-almanac -a claude-code
插件命令备选方式
/plugin add https://github.com/pjt222/agent-almanac
Git 克隆备选方式
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/solve-modular-arithmetic

在 Claude Code 中复制并粘贴此命令以安装该技能

技能文档

Solve Modular Arithmetic

Resolver problemas de aritmética modular analizando sistemas de congruencias, aplicando el algoritmo euclidiano extendido para inversos, usando el Teorema Chino del Resto para congruencias simultáneas y aprovechando el teorema de Euler para exponenciación modular. Verificar cada solución por sustitución.

Cuándo Usar

  • Resolver una congruencia lineal simple ax = b (mod m)
  • Resolver un sistema de congruencias simultáneas (Teorema Chino del Resto)
  • Calcular un inverso modular a^{-1} (mod m)
  • Evaluar exponenciaciones modulares grandes a^k (mod m)
  • Determinar el orden de un elemento en Z/mZ
  • Trabajar con grupos cíclicos, raíces primitivas o contextos de logaritmo discreto

Entradas

  • Requerido: La(s) congruencia(s) o ecuación modular a resolver
  • Opcional: Si se deben mostrar los pasos del algoritmo euclidiano extendido explícitamente
  • Opcional: Si se debe aplicar el teorema de Euler o el pequeño teorema de Fermat
  • Opcional: Si se deben encontrar raíces primitivas u órdenes de elementos
  • Opcional: Formato de salida (paso a paso, compacto o estilo demostración)

Procedimiento

Paso 1: Analizar el Sistema de Congruencias o Ecuación Modular

Extraer la estructura matemática del enunciado del problema.

  1. Identificar el tipo:

    • Congruencia lineal simple: ax = b (mod m)
    • Sistema de congruencias: x = a1 (mod m1), x = a2 (mod m2), ...
    • Exponenciación modular: a^k (mod m)
    • Inverso modular: encontrar a^{-1} (mod m)
  2. Normalizar: Reducir todos los coeficientes módulo sus respectivos módulos. Asegurar que a, b, m sean enteros no negativos con m > 0.

  3. Registrar el problema analizado en notación estándar.

Esperado: Un problema modular claramente analizado y normalizado con todos los valores reducidos.

En caso de fallo: Si la notación es ambigua (ej., "resolver 3x + 5 = 2 mod 7" podría significar 3x + 5 = 2 (mod 7) o 3x + (5 = 2 mod 7)), aclarar con el usuario. Por defecto, interpretar mod como aplicándose a toda la ecuación.

Paso 2: Resolver una Congruencia Simple (si aplica)

Resolver ax = b (mod m) usando el algoritmo euclidiano extendido.

  1. Calcular g = mcd(a, m) usando el algoritmo euclidiano:

    • Aplicar división repetida: m = q1a + r1, a = q2r1 + r2, ... hasta que el residuo = 0.
    • El último residuo no nulo es mcd(a, m).
  2. Verificar solubilidad: ax = b (mod m) tiene solución si y solo si g | b.

    • Si g no divide a b, la congruencia no tiene solución. Detenerse.
  3. Reducir: Dividir entre g para obtener (a/g)x = (b/g) (mod m/g). Ahora mcd(a/g, m/g) = 1.

  4. Encontrar el inverso modular de a/g módulo m/g usando el algoritmo euclidiano extendido:

    • Retro-sustituir a través de los pasos del algoritmo euclidiano para expresar el mcd como combinación lineal: 1 = (a/g)*s + (m/g)*t.
    • El coeficiente s (reducido mod m/g) es el inverso.
  5. Calcular la solución particular: x0 = s * (b/g) mod (m/g).

  6. Escribir la solución general: x = x0 + (m/g)*k para k = 0, 1, ..., g - 1 da todas las g soluciones incongruentes módulo m.

Ejemplo del algoritmo euclidiano extendido (encontrando 17^{-1} mod 43):

43 = 2*17 + 9
17 = 1*9  + 8
 9 = 1*8  + 1
 8 = 8*1  + 0

Back-substitute:
1 = 9 - 1*8
  = 9 - 1*(17 - 1*9) = 2*9 - 17
  = 2*(43 - 2*17) - 17 = 2*43 - 5*17

So 17*(-5) = 1 (mod 43), i.e., 17^{-1} = -5 = 38 (mod 43).

Esperado: El conjunto completo de soluciones para la congruencia, o una demostración de que no existe solución.

En caso de fallo: Si la retro-sustitución del euclidiano extendido produce un resultado incorrecto, verificar cada paso de división. El error más común es un error de signo durante la retro-sustitución. Verificar: a * inverso mod m debe igualar 1.

Paso 3: Resolver un Sistema mediante el Teorema Chino del Resto (si aplica)

Resolver x = a1 (mod m1), x = a2 (mod m2), ..., x = ak (mod mk).

  1. Verificar coprimalidad por pares: Para cada par (mi, mj), verificar mcd(mi, mj) = 1.

    • Si todos los pares son coprimos, el TCR aplica directamente.
    • Si algunos pares no son coprimos, verificar compatibilidad: para cada par no coprimo, verificar ai = aj (mod mcd(mi, mj)). Si son compatibles, reducir usando mcm. Si son incompatibles, no existe solución.
  2. Calcular M = m1 * m2 * ... * mk (el producto de todos los módulos).

  3. Para cada i, calcular Mi = M / mi (el producto de todos los módulos excepto mi).

  4. Para cada i, encontrar yi = Mi^{-1} (mod mi) usando el algoritmo euclidiano extendido del Paso 2.

  5. Calcular la solución: x = sum(ai * Mi * yi para i = 1..k) mod M.

  6. Enunciar el resultado: x = [valor] (mod M). Esta es la solución única módulo M.

Referencia de totientes comunes:

nphi(n)nphi(n)nphi(n)
21104208
321110248
421242520
541312308
621463612
761584816
841686016
9618610040

Esperado: Una solución única módulo M, o una demostración de incompatibilidad.

En caso de fallo: Si el cálculo del TCR produce un resultado que no pasa la verificación, revisar los cálculos de inverso modular en el paso 4. Un error común es calcular Mi^{-1} mod M en lugar de Mi^{-1} mod mi. Cada inverso se calcula módulo el módulo individual, no el producto.

Paso 4: Aplicar el Teorema de Euler o el Pequeño Teorema de Fermat (si aplica)

Evaluar exponenciaciones modulares o simplificar expresiones usando el teorema de Euler.

  1. Teorema de Euler: Si mcd(a, m) = 1, entonces a^{phi(m)} = 1 (mod m).

    • Calcular phi(m) usando la fórmula del totiente: si m = p1^e1 * p2^e2 * ... * pk^ek, entonces phi(m) = m * producto((1 - 1/pi) para cada primo pi que divide a m).
  2. Pequeño teorema de Fermat (caso especial): Si p es primo y mcd(a, p) = 1, entonces a^{p-1} = 1 (mod p).

  3. Reducir el exponente: Para calcular a^k (mod m):

    • Calcular r = k mod phi(m).
    • Entonces a^k = a^r (mod m).
  4. Calcular a^r (mod m) usando cuadratura repetida (exponenciación binaria):

    • Escribir r en binario: r = b_n * 2^n + ... + b_1 * 2 + b_0.
    • Comenzar con resultado = 1.
    • Para cada bit del más significativo al menos: resultado = resultado^2 mod m; si el bit es 1, resultado = resultado * a mod m.
  5. Manejar el caso mcd(a, m) > 1: El teorema de Euler no aplica directamente. Factorizar m y usar TCR para combinar resultados de módulos potencia de primos, usando elevación del exponente o cálculo directo.

Esperado: El valor de a^k (mod m), calculado mediante reducción de exponente y cuadratura repetida.

En caso de fallo: Si mcd(a, m) > 1 y el resultado parece incorrecto, no aplicar el teorema de Euler. En su lugar, calcular directamente o factorizar m en partes coprimas donde al menos algunas partes sean coprimas con a, resolver módulo cada parte y recombinar con TCR.

Paso 5: Verificar la Solución por Sustitución

Comprobar cada solución sustituyéndola en las ecuaciones originales.

  1. Para congruencias simples: Calcular a * x mod m y verificar que iguala b.

  2. Para sistemas TCR: Para cada congruencia x = ai (mod mi), verificar x mod mi = ai.

  3. Para exponenciaciones modulares: Si es posible, verificar con un segundo método computacional (ej., cálculo directo para valores pequeños, o implementación independiente de cuadratura repetida).

  4. Documentar la verificación explícitamente:

Solution: x = 23
Check 1: 23 mod 3 = 2 = a1. Correct.
Check 2: 23 mod 5 = 3 = a2. Correct.
Check 3: 23 mod 7 = 2 = a3. Correct.
All congruences satisfied.

Esperado: Todas las ecuaciones originales verificadas con cálculo explícito mostrado.

En caso de fallo: Si la verificación falla, rastrear el procedimiento hacia atrás para encontrar el error computacional. Fuentes comunes: errores aritméticos en el algoritmo euclidiano extendido, signo incorrecto en la retro-sustitución, u olvidar reducir módulo M en el paso final del TCR.

Validación

  • El tipo de problema está correctamente identificado (congruencia simple, sistema, exponenciación, inverso)
  • Todos los coeficientes están reducidos módulo sus respectivos módulos
  • Para ax = b (mod m): mcd(a, m) | b se verifica antes de resolver
  • La retro-sustitución del euclidiano extendido se verifica: a * inverso mod m = 1
  • Para TCR: la coprimalidad por pares se verifica antes de aplicar el teorema
  • Para TCR con módulos no coprimos: se verifica la compatibilidad
  • El teorema de Euler se aplica solo cuando mcd(a, m) = 1
  • El totiente phi(m) se calcula a partir de la factorización prima, no se adivina
  • La cuadratura repetida usa reducción modular en cada paso (sin desbordamiento)
  • Cada solución se verifica por sustitución en las ecuaciones originales

Errores Comunes

  • Aplicar TCR sin verificación de coprimalidad: La fórmula estándar del TCR requiere módulos coprimos por pares. Aplicarla a módulos no coprimos da una respuesta incorrecta, no un error. Siempre verificar mcd(mi, mj) = 1 primero.

  • Calcular el inverso incorrecto: Mi^{-1} debe calcularse módulo mi (el módulo individual), no módulo M (el producto). Este es el error de implementación del TCR más común.

  • Aplicar el teorema de Euler cuando mcd(a, m) > 1: a^{phi(m)} = 1 (mod m) requiere mcd(a, m) = 1. Si esto falla, el teorema no aplica y el resultado es incorrecto.

  • Errores de signo en la retro-sustitución del euclidiano extendido: Mantener un seguimiento cuidadoso de los signos en cada paso. El inverso final puede ser negativo; siempre reducir módulo m para obtener un representante positivo.

  • Desbordamiento en exponenciación modular: Incluso con cuadratura repetida, los productos intermedios pueden desbordar. Siempre reducir módulo m después de cada multiplicación, no solo al final.

  • Olvidar múltiples soluciones: ax = b (mod m) con g = mcd(a, m) > 1 y g | b tiene exactamente g soluciones incongruentes módulo m, no solo una.

Habilidades Relacionadas

  • analyze-prime-numbers -- la factorización prima es necesaria para calcular phi(m) y verificar coprimalidad
  • explore-diophantine-equations -- las ecuaciones diofánticas lineales ax + by = c son equivalentes a congruencias lineales ax = c (mod b)
  • prove-geometric-theorem -- la aritmética modular aparece en demostraciones de constructibilidad (ej., qué n-gonos regulares son constructibles)

GitHub 仓库

pjt222/agent-almanac
路径: i18n/es/skills/solve-modular-arithmetic
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

相关推荐技能

llamaguard

其他

LlamaGuard是Meta推出的7-8B参数内容审核模型,专门用于过滤LLM的输入和输出内容。它能检测六大安全风险类别(暴力/仇恨、性内容、武器、违禁品、自残、犯罪计划),准确率达94-95%。开发者可通过HuggingFace、vLLM或Sagemaker快速部署,并能与NeMo Guardrails集成实现自动化安全防护。

查看技能

cost-optimization

其他

这个Claude Skill帮助开发者优化云成本,通过资源调整、标记策略和预留实例来降低AWS、Azure和GCP的开支。它适用于减少云支出、分析基础设施成本或实施成本治理策略的场景。关键功能包括提供成本可视化、资源规模调整指导和定价模型优化建议。

查看技能

quantizing-models-bitsandbytes

其他

这个Skill使用bitsandbytes库量化大语言模型,能在GPU内存有限时通过8位或4位量化减少50-75%内存占用,同时保持精度损失最小。它支持INT8、NF4、FP4等多种量化格式,可与HuggingFace Transformers无缝集成,适用于需要部署更大模型或加速推理的场景。还提供QLoRA训练和8位优化器支持,让开发者能轻松实现高效模型压缩。

查看技能

dispatching-parallel-agents

其他

该Skill用于并行处理3个以上无依赖关系的独立故障,可为每个问题域分派专属Claude代理同时执行调查修复。它通过并发处理多个独立问题显著提升故障排查效率,特别适用于测试文件、子系统等无共享状态的场景。

查看技能