solve-modular-arithmetic
关于
This Claude Skill solves modular arithmetic problems including linear congruences, modular inverses, large modular exponentiations, and systems of congruences using the Chinese Remainder Theorem. It implements algorithms like the extended Euclidean algorithm and Euler's theorem for computations. Use it when working with cyclic groups, discrete logarithms, or any number theory context requiring modular operations.
快速安装
Claude Code
推荐npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/solve-modular-arithmetic在 Claude Code 中复制并粘贴此命令以安装该技能
技能文档
Modulare Arithmetik loesen
Modulare Arithmetik-Probleme loesen durch Parsen von Kongruenzsystemen, Anwenden des erweiterten euklidischen Algorithmus fuer Inverse, Verwenden des Chinesischen Restsatzes fuer simultane Kongruenzen und Nutzen des Satzes von Euler fuer modulare Potenzierung. Jede Loesung durch Einsetzen verifizieren.
Wann verwenden
- Loesen einer einzelnen linearen Kongruenz ax = b (mod m)
- Loesen eines Systems simultaner Kongruenzen (Chinesischer Restsatz)
- Berechnen eines modularen Inversen a^{-1} (mod m)
- Auswerten grosser modularer Potenzen a^k (mod m)
- Bestimmen der Ordnung eines Elements in Z/mZ
- Arbeiten mit zyklischen Gruppen, Primitivwurzeln oder diskreten Logarithmus-Kontexten
Eingaben
- Erforderlich: Die zu loesende Kongruenz(en) oder modulare Gleichung
- Optional: Ob die Schritte des erweiterten euklidischen Algorithmus explizit gezeigt werden sollen
- Optional: Ob der Satz von Euler oder der kleine Fermatsche Satz angewandt werden soll
- Optional: Ob Primitivwurzeln oder Elementordnungen gefunden werden sollen
- Optional: Ausgabeformat (Schritt-fuer-Schritt, kompakt oder Beweisstil)
Vorgehensweise
Schritt 1: Kongruenzsystem oder modulare Gleichung parsen
Die mathematische Struktur aus der Problemstellung extrahieren.
-
Typ identifizieren:
- Einzelne lineare Kongruenz: ax = b (mod m)
- Kongruenzsystem: x = a1 (mod m1), x = a2 (mod m2), ...
- Modulare Potenzierung: a^k (mod m)
- Modulares Inverses: a^{-1} (mod m) finden
-
Normalisieren: Alle Koeffizienten modulo ihrer jeweiligen Moduli reduzieren. Sicherstellen dass a, b, m nicht-negative ganze Zahlen mit m > 0 sind.
-
Erfassen: Das geparste Problem in Standardnotation aufschreiben.
Erwartet: Ein klar geparstes und normalisiertes modulares Problem mit allen reduzierten Werten.
Bei Fehler: Wenn die Notation mehrdeutig ist (z.B. "loese 3x + 5 = 2 mod 7" koennte 3x + 5 = 2 (mod 7) oder 3x + (5 = 2 mod 7) bedeuten), mit dem Benutzer klaeren. Standardmaessig mod als auf die gesamte Gleichung angewandt interpretieren.
Schritt 2: Einzelne Kongruenz loesen (falls zutreffend)
ax = b (mod m) mittels erweitertem euklidischen Algorithmus loesen.
-
g = ggT(a, m) berechnen mittels euklidischem Algorithmus:
- Wiederholte Division anwenden: m = q1a + r1, a = q2r1 + r2, ... bis Rest = 0.
- Der letzte von Null verschiedene Rest ist ggT(a, m).
-
Loesbarkeit pruefen: ax = b (mod m) hat genau dann eine Loesung, wenn g | b.
- Wenn g nicht b teilt, hat die Kongruenz keine Loesung. Stopp.
-
Reduzieren: Durch g teilen um (a/g)x = (b/g) (mod m/g) zu erhalten. Nun ist ggT(a/g, m/g) = 1.
-
Modulares Inverses finden von a/g modulo m/g mittels erweitertem euklidischen Algorithmus:
- Durch die Schritte des euklidischen Algorithmus rueckwaerts einsetzen um ggT als Linearkombination auszudruecken: 1 = (a/g)*s + (m/g)*t.
- Der Koeffizient s (reduziert mod m/g) ist das Inverse.
-
Partikulaere Loesung berechnen: x0 = s * (b/g) mod (m/g).
-
Allgemeine Loesung aufschreiben: x = x0 + (m/g)*k fuer k = 0, 1, ..., g - 1 ergibt alle g inkongruenten Loesungen modulo m.
Beispiel des erweiterten euklidischen Algorithmus (Finden von 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).
Erwartet: Die vollstaendige Loesungsmenge der Kongruenz oder ein Beweis, dass keine Loesung existiert.
Bei Fehler: Wenn die Rueckwaertssubstitution des erweiterten euklidischen Algorithmus ein falsches Ergebnis liefert, jeden Divisionsschritt verifizieren. Der haeufigste Fehler ist ein Vorzeichenfehler bei der Rueckwaertssubstitution. Pruefung: a * Inverses mod m sollte 1 ergeben.
Schritt 3: System ueber den Chinesischen Restsatz loesen (falls zutreffend)
x = a1 (mod m1), x = a2 (mod m2), ..., x = ak (mod mk) loesen.
-
Paarweise Teilerfremdheit pruefen: Fuer jedes Paar (mi, mj) verifizieren dass ggT(mi, mj) = 1.
- Wenn alle Paare teilerfremd sind, ist der CRT direkt anwendbar.
- Wenn einige Paare nicht teilerfremd sind, Kompatibilitaet pruefen: fuer jedes nicht-teilerfremde Paar verifizieren dass ai = aj (mod ggT(mi, mj)). Falls kompatibel, mittels kgV reduzieren. Falls inkompatibel, existiert keine Loesung.
-
M = m1 * m2 * ... * mk berechnen (das Produkt aller Moduli).
-
Fuer jedes i, Mi = M / mi berechnen (das Produkt aller Moduli ausser mi).
-
Fuer jedes i, yi = Mi^{-1} (mod mi) finden mittels erweitertem euklidischen Algorithmus aus Schritt 2.
-
Loesung berechnen: x = sum(ai * Mi * yi fuer i = 1..k) mod M.
-
Ergebnis angeben: x = [Wert] (mod M). Dies ist die eindeutige Loesung modulo M.
Referenz haeufiger Euler-Funktionswerte:
| n | phi(n) | n | phi(n) | n | phi(n) |
|---|---|---|---|---|---|
| 2 | 1 | 10 | 4 | 20 | 8 |
| 3 | 2 | 11 | 10 | 24 | 8 |
| 4 | 2 | 12 | 4 | 25 | 20 |
| 5 | 4 | 13 | 12 | 30 | 8 |
| 6 | 2 | 14 | 6 | 36 | 12 |
| 7 | 6 | 15 | 8 | 48 | 16 |
| 8 | 4 | 16 | 8 | 60 | 16 |
| 9 | 6 | 18 | 6 | 100 | 40 |
Erwartet: Eine eindeutige Loesung modulo M oder ein Beweis der Inkompatibilitaet.
Bei Fehler: Wenn die CRT-Berechnung ein Ergebnis liefert, das die Verifikation nicht besteht, die modularen Inversberechnungen in Schritt 4 pruefen. Ein haeufiger Fehler ist die Berechnung von Mi^{-1} mod M statt Mi^{-1} mod mi. Jedes Inverse wird modulo des einzelnen Modulus berechnet, nicht des Produkts.
Schritt 4: Satz von Euler oder kleinen Fermatschen Satz anwenden (falls zutreffend)
Modulare Potenzen auswerten oder Ausdruecke mittels Satz von Euler vereinfachen.
-
Satz von Euler: Wenn ggT(a, m) = 1, dann a^{phi(m)} = 1 (mod m).
- phi(m) mittels Euler-Formel berechnen: wenn m = p1^e1 * p2^e2 * ... * pk^ek, dann phi(m) = m * Produkt((1 - 1/pi) fuer jede Primzahl pi die m teilt).
-
Kleiner Fermatscher Satz (Spezialfall): Wenn p Primzahl und ggT(a, p) = 1, dann a^{p-1} = 1 (mod p).
-
Exponenten reduzieren: Um a^k (mod m) zu berechnen:
- r = k mod phi(m) berechnen.
- Dann a^k = a^r (mod m).
-
a^r (mod m) berechnen mittels wiederholtem Quadrieren (binaere Potenzierung):
- r in Binaerdarstellung schreiben: r = b_n * 2^n + ... + b_1 * 2 + b_0.
- Mit result = 1 beginnen.
- Fuer jedes Bit von hoechstwertig bis niedrigstwertig: result = result^2 mod m; wenn Bit 1 ist, result = result * a mod m.
-
Fall ggT(a, m) > 1 behandeln: Der Satz von Euler ist nicht direkt anwendbar. m faktorisieren und CRT verwenden um Ergebnisse aus Primzahlpotenz-Moduli zu kombinieren, mittels Exponentenanhebung oder direkter Berechnung.
Erwartet: Der Wert von a^k (mod m), berechnet ueber Exponenrenreduktion und wiederholtes Quadrieren.
Bei Fehler: Wenn ggT(a, m) > 1 und das Ergebnis falsch erscheint, den Satz von Euler nicht anwenden. Stattdessen direkt berechnen oder m in teilerfremde Teile faktorisieren, wobei zumindest einige Teile teilerfremd zu a sind, modulo jedes Teils loesen und mit CRT rekombinieren.
Schritt 5: Loesung durch Einsetzen verifizieren
Jede Loesung durch Einsetzen in die Originalgleichungen pruefen.
-
Fuer einzelne Kongruenzen: a * x mod m berechnen und verifizieren dass es gleich b ist.
-
Fuer CRT-Systeme: Fuer jede Kongruenz x = ai (mod mi) verifizieren dass x mod mi = ai.
-
Fuer modulare Potenzen: Falls moeglich, mit einer zweiten Berechnungsmethode verifizieren (z.B. direkte Berechnung fuer kleine Werte oder unabhaengige Implementierung wiederholten Quadrierens).
-
Verifikation explizit dokumentieren:
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.
Erwartet: Alle Originalgleichungen mit explizit gezeigter Berechnung verifiziert.
Bei Fehler: Wenn die Verifikation fehlschlaegt, durch die Vorgehensweise zurueckverfolgen um den Rechenfehler zu finden. Haeufige Quellen: Rechenfehler im erweiterten euklidischen Algorithmus, falsches Vorzeichen bei der Rueckwaertssubstitution oder vergessene Reduktion modulo M im letzten CRT-Schritt.
Validierung
- Problemtyp ist korrekt identifiziert (einzelne Kongruenz, System, Potenzierung, Inverses)
- Alle Koeffizienten sind modulo ihrer jeweiligen Moduli reduziert
- Fuer ax = b (mod m): ggT(a, m) | b ist vor dem Loesen geprueft
- Rueckwaertssubstitution des erweiterten euklidischen Algorithmus ist verifiziert: a * Inverses mod m = 1
- Fuer CRT: paarweise Teilerfremdheit ist vor Anwendung des Satzes verifiziert
- Fuer CRT mit nicht-teilerfremden Moduli: Kompatibilitaet ist geprueft
- Satz von Euler wird nur angewandt wenn ggT(a, m) = 1
- Euler-Funktion phi(m) ist aus der Primfaktorzerlegung berechnet, nicht geraten
- Wiederholtes Quadrieren verwendet modulare Reduktion bei jedem Schritt (kein Ueberlauf)
- Jede Loesung ist durch Einsetzen in die Originalgleichungen verifiziert
Haeufige Stolperfallen
-
CRT ohne Teilerfremdheitspruefung anwenden: Die Standard-CRT-Formel erfordert paarweise teilerfremde Moduli. Anwendung auf nicht-teilerfremde Moduli gibt eine falsche Antwort, keinen Fehler. Immer zuerst ggT(mi, mj) = 1 pruefen.
-
Das falsche Inverse berechnen: Mi^{-1} muss modulo mi (dem einzelnen Modulus) berechnet werden, nicht modulo M (dem Produkt). Dies ist der einzelne haeufigste CRT-Implementierungsfehler.
-
Satz von Euler anwenden wenn ggT(a, m) > 1: a^{phi(m)} = 1 (mod m) erfordert ggT(a, m) = 1. Wenn dies fehlschlaegt, ist der Satz nicht anwendbar und das Ergebnis falsch.
-
Vorzeichenfehler bei der Rueckwaertssubstitution des erweiterten euklidischen Algorithmus: Bei jedem Schritt sorgfaeltig auf Vorzeichen achten. Das endgueltige Inverse kann negativ sein; immer modulo m reduzieren um einen positiven Repraesentanten zu erhalten.
-
Ueberlauf bei modularer Potenzierung: Selbst bei wiederholtem Quadrieren koennen Zwischenprodukte ueberlaufen. Immer modulo m nach jeder Multiplikation reduzieren, nicht erst am Ende.
-
Mehrfachloesungen vergessen: ax = b (mod m) mit g = ggT(a, m) > 1 und g | b hat genau g inkongruente Loesungen modulo m, nicht nur eine.
Verwandte Skills
analyze-prime-numbers-- Primfaktorzerlegung wird zur Berechnung von phi(m) und zur Verifikation der Teilerfremdheit benoetigtexplore-diophantine-equations-- Lineare diophantische Gleichungen ax + by = c sind aequivalent zu linearen Kongruenzen ax = c (mod b)prove-geometric-theorem-- Modulare Arithmetik erscheint in Konstruierbarkeiitsbeweisen (z.B. welche regelmaessigen n-Ecke konstruierbar sind)
GitHub 仓库
相关推荐技能
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代理同时执行调查修复。它通过并发处理多个独立问题显著提升故障排查效率,特别适用于测试文件、子系统等无共享状态的场景。
