Test Miller–Rabin deterministico
97 è primo: supera tutte le sette basi fisse, 2, 3, 5, 7, 11, 13 e 23, che decidono con certezza ogni intero fino a 9007199254740991. Per un numero composto vede anche la prima base che lo ha smascherato. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- N
- 97
- Estremo
- 9.007.199.254.740.991
- Numero di testimoni
- 7
Il test di Miller–Rabin deterministico decide se un intero n è primo eseguendo il test del testimone di primo probabilmente forte su un elenco breve e fisso di basi note per risolvere ogni intero sotto un limite di garanzia pubblicato. A differenza di un’esecuzione probabilistica di Miller–Rabin che estrae testimoni casuali e stima solo l’errore, questa capacità usa sempre le stesse basi, restituisce sempre lo stesso verdetto per lo stesso n e rifiuta l’ingresso che supera il limite in cui tali basi non sono più dimostrate sufficienti. Lei invia un unico intero almeno due e al più il limite, e riceve un indicatore di primalità, l’elenco dei testimoni, il limite stesso e—quando il numero è composto—il primo testimone che lo ha dimostrato.
Come funziona il test di primo probabilmente forte a basi fisse
Miller–Rabin riscrive un candidato dispari n come n meno uno uguale a d per due alla s con d dispari, poi per ogni testimone a calcola a elevato a d modulo n. Se quella potenza vale uno o n meno uno, il testimone passa. Altrimenti l’algoritmo eleva al quadrato il valore fino a s meno una volte e accetta il testimone solo se un quadrato intermedio vale n meno uno; qualsiasi altro percorso dimostra che n è composto per quella base.
Un numero che supera ogni testimone si dice primo probabilmente forte rispetto a quelle basi. Per insiemi fissi scelti con cura, risultati di teoria dei numeri mostrano che non esiste un composto sotto una soglia nota che inganni tutte le basi dell’insieme—così l’esito di primo probabilmente forte diventa un vero primo entro il limite. Questa capacità usa le sette basi due, tre, cinque, sette, undici, tredici e ventitré, sufficienti per ogni intero a sessantaquattro bit e quindi per ogni intero sicuro JavaScript fino a nove quadrilioni.
I primi minuscoli due e tre si risolvono come primi. Quando un testimone divide n ed è minore di n, quel testimone viene segnalato come base fallita perché n è un multiplo evidente.
Quando serve un test di primalità a basi fisse
I corsi di crittografia e i trainer CTF usano un test di Miller–Rabin deterministico per mostrare agli studenti la differenza tra controlli probabilistici con testimoni casuali e certificati a basi fisse che nominano il limite di garanzia nella risposta. Gli autori di librerie ancorano test unitari su primi noti, pseudoprimi forti e composti così un refactor dell’esponenziazione modulare non può invertire un verdetto in silenzio.
Gli sviluppatori di applicazioni convalidano valori di configurazione a forma di primo, semi di puzzle o parametri giocattolo Diffie–Hellman prima di una pipeline più lunga, catturando i pari e i piccoli composti senza erigere un sistema di algebra computazionale. Preferisca questo strumento quando l’intento di ricerca è specificamente l’algoritmo di Miller–Rabin deterministico con testimoni fissi e un limite rigido—non quando le serve il minimo divisore di un composto, la fattorizzazione prima completa, Lucas–Lehmer per i numeri di Mersenne o test probabilistici con un elenco di testimoni personalizzato che fornisce Lei.
Casi d'uso
Insegnare certificati Miller–Rabin a basi fisse
Mostri agli studenti un verdetto primo o composto insieme all’elenco esatto dei testimoni e al limite di garanzia, così la differenza rispetto ai test probabilistici con testimoni casuali è concreta.
Ancorare test unitari di primalità modulare
Affermi primi di riferimento, composti e rifiuti fuori limite contro un oracolo stabile di Miller–Rabin deterministico prima di pubblicare una modifica a una libreria crittografica o di teoria dei numeri.
Convalidare parametri a forma di primo sotto un limite
Rifiuti valori di configurazione, semi di puzzle o moduli crittografici giocattolo che falliscono il Miller–Rabin a basi fisse, e registri il testimone fallito nella traccia di audit.
Domande frequenti
Quanto costa il test di Miller–Rabin deterministico?
Lo stesso controllo gira anche gratis nel Suo browser su questa pagina; l’ingresso non valido non viene fatturato.
Quali numeri sono accettati?
Interi interi da 2 fino al limite di garanzia pubblicato 9007199254740991.
Quali basi testimone vengono usate?
L’elenco fisso 2, 3, 5, 7, 11, 13 e 23. Sono restituite nel campo witnesses in ogni risposta riuscita così i client non devono codificare l’insieme.
Si tratta di un Miller–Rabin probabilistico?
No. Le basi sono fisse e dimostrate sufficienti per ogni intero nel limite supportato, quindi lo stesso n produce sempre lo stesso verdetto deterministico di primo o composto.
Cosa succede se n supera il limite?
La capacità non affermerà un verdetto deterministico fuori dall’intervallo in cui le basi fisse sono certificate.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/numth/miller-rabin-deterministic \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":97}'const res = await fetch("https://api.kit.forhosting.com/numth/miller-rabin-deterministic", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 97
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/miller-rabin-deterministic",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 97
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/miller-rabin-deterministic", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":97}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":97}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/miller-rabin-deterministic", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"n": 97
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.miller_rabin_deterministic",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
La stessa aritmetica modulare pura alimenta il percorso gratuito del browser e quello dell’API, così controlli sui compiti, giocattoli crittografici e script di automazione non divergono mai su un numero di Carmichael al limite o su uno pseudoprimo forte.
Cosa restituisce Miller–Rabin deterministico e come agisce il limite
Ogni chiamata riuscita risponde a quattro domande collegate: se n è primo sotto la suite Miller–Rabin a basi fisse, quali basi testimone sono state applicate, qual è il massimo intero che questa suite garantisce di decidere correttamente e—se n è composto—quale testimone ha fallito per primo il test di primo probabilmente forte. Quel taglio netto è la differenza di prodotto rispetto a un verificatore generico di primalità che potrebbe cambiare strategia in silenzio o affermare la primalità senza dichiarare il limite del certificato. La risposta è un oggetto JSON compatto con un flag booleano prime, l’intero n restituito, un array ordinato witnesses, il limite numerico, un witness_count, un campo failing_witness (null per i primi, una base concreta per i composti) e un’etichetta method impostata a miller_rabin_deterministic così i client possono registrare il percorso dell’algoritmo. L’ingresso mancante, frazionario, non numerico o strettamente minore di due viene rifiutato con invalid_input prima di qualsiasi esponenziazione modulare. I valori superiori al limite di garanzia pubblicato sono pure rifiutati con invalid_input e un messaggio che nomina il limite, perché un elenco fisso di testimoni è un certificato matematico solo in quell’intervallo; al di sopra le stesse basi possono lasciare un composto non rilevato. Usi questo endpoint quando le serve un verdetto auditabile di Miller–Rabin deterministico con elenco dei testimoni e limite scritti nel risultato, non una congettura probabilistica né la fattorizzazione completa di ogni divisore.
Come funziona il test di primo probabilmente forte a basi fisse
I pari composti sono rifiutati subito con failing_witness due senza scorrere l’intero ciclo.
Dove un’API Miller–Rabin deterministico dà valore
Gli ingegneri dei dati filtrano colonne numeriche che pretendono di essere prime e memorizzano il campo failing_witness nel registro di audit quando una riga fallisce. Poiché la capacità è di livello A, Lei può incollare un numero in questa pagina ed eseguire la logica identica gratis nel browser; automatizzi lo stesso contratto in seguito a $0.002 per richiesta collegando le attività a script o SDK. Mantenga n un intero di almeno due entro il limite pubblicato, tratti invalid_input come correzione del client e non come nuovo tentativo, e registri i campi witnesses e bound ogni volta che le serve un certificato riproducibile di ciò che è stato verificato.