solve-modular-arithmetic
О программе
Этот навык Claude решает задачи модульной арифметики, включая линейные сравнения, модульные обратные элементы, возведение больших чисел в степень по модулю и системы сравнений с использованием китайской теоремы об остатках. Он применяет такие алгоритмы, как расширенный алгоритм Евклида и теорему Эйлера для вычислений. Используйте его при работе с циклическими группами, дискретными логарифмами или в любом контексте теории чисел, требующем модульных операций.
Быстрая установка
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–8 миллиардами параметров для модерации входных и выходных данных больших языковых моделей по шести категориям безопасности, таким как насилие и разжигание ненависти. Она обеспечивает точность 94–95% и может быть развернута с помощью vLLM, Hugging Face или Amazon SageMaker. Используйте этот навык, чтобы легко интегрировать фильтрацию контента и защитные механизмы в ваши ИИ-приложения.
cost-optimization
ДругоеЭтот навык Claude помогает разработчикам оптимизировать облачные расходы за счет правильного подбора ресурсов, стратегий тегирования и анализа затрат. Он предоставляет framework для сокращения облачных расходов и внедрения управления затратами в AWS, Azure и GCP. Используйте его, когда вам нужно проанализировать расходы на инфраструктуру, оптимизировать ресурсы или уложиться в бюджетные ограничения.
quantizing-models-bitsandbytes
ДругоеЭтот навык выполняет квантизацию LLM до 8-битной или 4-битной точности с использованием библиотеки bitsandbytes, обеспечивая сокращение использования памяти на 50-75% при минимальной потере точности. Он идеально подходит для запуска больших моделей при ограниченной памяти GPU или для ускорения вывода, поддерживая форматы INT8, NF4 и FP4. Навык интегрируется с HuggingFace Transformers и позволяет использовать обучение QLoRA и 8-битные оптимизаторы.
dispatching-parallel-agents
ДругоеЭтот навык Claude распределяет нескольких агентов для исследования и устранения трёх и более независимых проблем параллельно. Он предназначен для сценариев с несвязанными сбоями, которые можно устранить без общего состояния или зависимостей. Ключевая возможность — параллельное решение проблем, где за каждую независимую предметную область назначается отдельный агент для максимальной эффективности.
