Fermat-Pseudoprimzahlen für jede Basis prüfen
Der Fermat-Pseudoprimzahl-Prüfer übernimmt eine zusammengesetzte ganze Zahl n und eine Basis a, berechnet exakt den Rest von a hoch n minus eins modulo n und meldet, ob dieser Rest eins ist.
Im Browser ausführen – kostenlos
Eine bestehende zusammengesetzte Zahl ist zur gewählten Basis eine Fermat-Pseudoprimzahl: Sie verhält sich in diesem einzelnen Test wie eine Primzahl, obwohl sie keine ist. Zusätzlich wird der größte gemeinsame Teiler ausgegeben, damit Sie das Ergebnis leichter untersuchen und erklären können.
Was ein positives Ergebnis tatsächlich bedeutet
Der kleine Satz von Fermat besagt: Ist n eine Primzahl und a nicht durch n teilbar, dann hinterlässt a hoch n minus eins bei Division durch n den Rest eins. Die Umkehrung gilt jedoch nicht. Auch manche zusammengesetzten ganzen Zahlen ergeben für bestimmte Basen den Rest eins; sie heißen Fermat-Pseudoprimzahlen zu diesen Basen. Dieses Werkzeug verlangt ausdrücklich eine zusammengesetzte Zahl n, prüft diese Voraussetzung zuerst und wertet danach die Kongruenz exakt aus. Sind passes_fermat_test und is_fermat_pseudoprime wahr, hat die angegebene zusammengesetzte Zahl den Fermat-Test für genau diese Basis getäuscht. Das bedeutet weder, dass n prim oder wahrscheinlich prim ist, noch dass n für jede Basis pseudoprim ist. Die Basis gehört zur Aussage und sollte stets zusammen mit dem Ergebnis genannt werden. Der ausgegebene Rest liefert den unmittelbaren rechnerischen Nachweis: Eins bedeutet bestanden, jeder andere Wert bedeutet nicht bestanden. Der größte gemeinsame Teiler ist ebenfalls hilfreich, weil ein nicht trivialer Teiler viele Fehlschläge sofort erklärt und Versuche mit teilerfremden Basen von Eingaben unterscheidet, die bereits eine Faktorbeziehung zeigen.
Wie die Berechnung exakt bleibt
Beide Eingaben werden als Dezimalzeichenketten übergeben, damit ganze Zahlen oberhalb des sicheren JavaScript-Zahlenbereichs vor der Berechnung nicht gerundet werden. Der zulässige Bereich endet bei der größten vorzeichenlosen 64-Bit-Ganzzahl. Dadurch besitzt die Primzahlprüfung eine klare, durchsetzbare Grenze. Vor dem Fermat-Test verwendet das Werkzeug ein deterministisches Miller–Rabin-Verfahren mit einer Zeugenmenge, die für diesen gesamten Bereich ausreicht. Wird eine Primzahl erkannt, folgt ein Eingabefehler: Primzahlen erfüllen zwar den Satz, können definitionsgemäß aber keine Pseudoprimzahlen sein. Für eine gültige zusammengesetzte Zahl nutzt die modulare Potenzierung wiederholtes Quadrieren, statt den riesigen Wert a^(n-1) aufzubauen. Jede Multiplikation wird modulo n reduziert, sodass die Zwischenwerte mit BigInt begrenzt und exakt bleiben. Den Wert gcd(a,n) berechnet der euklidische Algorithmus separat. Die Basis muss 2 <= a <= n - 2 erfüllen. Zufällige Zeugen, Zeitwerte, Netzwerkaufrufe oder Gleitkommaoperationen beeinflussen die Antwort nicht; gleiche Eingaben führen daher immer zur gleichen Ausgabe.
Einsatz beim Lernen und Überprüfen
Ein klassisches Beispiel ist n = 341 mit der Basis a = 2. Obwohl 341 zusammengesetzt ist, ist 2^340 kongruent zu eins modulo 341. Die Zahl besteht daher den Test und ist zur Basis zwei eine Fermat-Pseudoprimzahl. Bei einer anderen Basis kann dieselbe zusammengesetzte Zahl durchfallen; ein einzelner Fermat-Test ist deshalb kein allgemeines Primzahlzertifikat. Im Unterricht verbindet die strukturierte Ausgabe die Definition direkt mit dem berechneten Rest. In einer Testsuite können Sie bekannte Vektoren für Pseudoprimzahlen und Nicht-Pseudoprimzahlen festhalten, ohne von einem Mathematikpaket oder maschinenabhängigen Zahlenumwandlungen abhängig zu sein. Für eigene Untersuchungen vergleichen Sie mehrere zulässige Basen bei festem n und beobachten, wie entscheidend die Wahl des Zeugen ist. Verstehen Sie ein wahres Ergebnis als Beleg für die Grenze des Fermat-Tests, nicht als Erlaubnis, die Zahl in kryptografischem oder sicherheitskritischem Code als prim anzunehmen. Die API kostet $0.002 pro geprüftem Paar; im Browser läuft dieselbe deterministische Berechnung lokal.
Anwendungsfälle
Eine klassische Pseudoprimzahl zeigen
Prüfen Sie, dass die bekannte zusammengesetzte Zahl 341 die Fermat-Kongruenz zur Basis 2 erfüllt, und untersuchen Sie den exakten Rest.
Aufgaben zur Zahlentheorie erstellen
Kontrollieren Sie Lösungen zu Aufgaben, die fragen, ob eine bestimmte zusammengesetzte Zahl zu einer vorgegebenen Basis pseudoprim ist.
Arithmetische Implementierungen testen
Nutzen Sie deterministische, strukturierte Ergebnisse als Referenzvektoren für modulare Potenzierung oder lehrorientierten Primzahlcode.
Häufige Fragen
Wann ist n zur Basis a eine Fermat-Pseudoprimzahl?
n muss zusammengesetzt sein und für die angegebene Basis die Kongruenz a^(n-1) gleich 1 modulo n erfüllen.
Warum wird eine primzahlige Eingabe n abgelehnt?
Primzahlen bestehen normalerweise die Fermat-Kongruenz, doch der Begriff Pseudoprimzahl gilt nur für zusammengesetzte ganze Zahlen; eine Primzahl wäre eine andere Fragestellung.
Beweist ein wahres Ergebnis, dass n prim ist?
Nein. Das Werkzeug hat bereits festgestellt, dass n zusammengesetzt ist. Das wahre Ergebnis zeigt, wie diese Zahl den Test für eine Basis täuscht.
Warum werden n und a als Zeichenketten eingegeben?
Dezimalzeichenketten bewahren in API und Browser jede Ziffer, auch oberhalb des sicheren Bereichs gewöhnlicher JavaScript-Zahlen.
Was kostet die Prüfung?
Die API kostet $0.002 pro geprüftem Paar. Das Browserwerkzeug führt dieselbe Berechnung lokal aus.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/numth/fermat-pseudoprime-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":"341","a":"2"}'const res = await fetch("https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": "341",
"a": "2"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/fermat-pseudoprime-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": "341",
"a": "2"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":"341","a":"2"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":"341","a":"2"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/fermat-pseudoprime-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"n": "341",
"a": "2"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.fermat_pseudoprime_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_digits | 20 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |