Radice quadrata modulare di Cipolla
L’algoritmo di Cipolla Le fornisce la radice quadrata vera e propria modulo un primo dispari, non solo un sì o un no: per 2 modulo 7 restituisce 3 e 4, perché 3 al quadrato fa 9, cioè 2 modulo 7. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- A
- 2
- Potenza (W)
- 7
- A modulo
- 2
- Radici
- 3, 4
- Radice
- 3
- Omega
- 0
L'algoritmo di Cipolla è un metodo classico della teoria dei numeri per estrarre radici quadrate modulo un primo dispari. Dati un intero a e un primo dispari p, restituisce un intero x tale che x al quadrato sia congruente ad a modulo p quando a è un residuo quadratico. I compiti di crittografia, la programmazione competitiva e i tutorial di aritmetica modulare spesso necessitano della radice esplicita — non solo del test sì o no di residualità del simbolo di Legendre.
Cos'è una radice quadrata modulare e quando si applica Cipolla
Nell'aritmetica modulare la congruenza x al quadrato congruente ad a modulo p chiede un intero x il cui quadrato cada nella stessa classe di residuo di a. Quando p è un primo dispari la risposta teorica è nitida: o a è divisibile per p e l'unica radice è zero, oppure esattamente metà delle classi non nulle sono residui quadratici e ogni residuo ha esattamente due radici r e p meno r. Il simbolo di Legendre indica in quale caso si trova, ma non costruisce r.
L'algoritmo di Cipolla colma quel divario lavorando in un'estensione quadratica scelta del campo con p elementi. Si sceglie un intero ausiliario omega tale che omega al quadrato meno a sia un non residuo quadratico modulo p; allora l'elemento omega più una radice quadrata formale di quel non residuo, elevato alla potenza (p più uno) divisa per due, ricade nel campo base e uguaglia una radice quadrata di a. Fallisce anche quando p è composto o pari, perché l'algoritmo classico e il criterio di Eulero assumono un modulo primo dispari.
Rispetto a Tonelli–Shanks, Cipolla è spesso più breve da implementare per demo didattiche e primi di media dimensione, e non richiede di fattorizzare p meno uno. Questa capacità si rivolge quindi a studenti, docenti e script che vogliono un percorso Cipolla trasparente con radici ordinate stabili e un contratto di errore documentato.
Dove le radici quadrate modulari di Cipolla creano valore
Le piattaforme di contest e i correttori LMS necessitano di un oracolo deterministico che rifiuti non residui e moduli composti invece di restituire array vuoti che un client difettoso potrebbe trattare come successo. Le note di crittografia che introducono la cifratura Rabin o la decompressione di punti su campi primi spesso vogliono un percorso Cipolla accanto a Tonelli–Shanks; un modulo puro condiviso mantiene identiche demo del browser e controlli del server.
Mantenga p entro il limite primo pubblicato, fissi l'array di radici ordinate nei test, e ottiene radici quadrate modulari riproducibili per didattica, automazione e edge workers senza incorporare un intero stack di algebra computazionale.
Casi d'uso
Aule e compiti di teoria dei numeri
Gli studenti inviano a e un primo dispari p e confrontano le radici ordinate restituite con i passi di Cipolla fatti a mano o con le tabelle del libro di testo.
Demo didattiche di cripto e notebook
Illustri Cipolla accanto ai controlli di Legendre in note in stile Rabin o di curve ellittiche senza importare una libreria algebrica pesante.
Domande frequenti
Come si calcola una radice quadrata modulare con l'algoritmo di Cipolla?
Invii interi a e un primo dispari p.
Cosa succede se a non è un residuo quadratico modulo p?
Nessuna radice viene inventata e la chiamata non viene addebitata.
Perché p deve essere un primo dispari?
L'algoritmo di Cipolla e il criterio di Eulero sono definiti per i primi dispari. I moduli pari o composti sono rifiutati affinché la risposta non pretenda mai che un campo non primo si comporti come F_p.
In che modo differisce da un calcolatore del simbolo di Legendre?
Legendre riporta solo la residualità (−1, 0 o 1). Questa capacità costruisce le radici quadrate esplicite quando esistono, usando la potenza nel campo di estensione di Cipolla.
Che differenza c’è tra l’algoritmo di Cipolla e quello di Tonelli–Shanks?
Entrambi trovano le stesse radici. Quello di Cipolla è spesso più breve da seguire in aula e non richiede di fattorizzare p meno uno: lavora in un’estensione del campo con p elementi ed eleva un elemento alla potenza p più uno diviso due.
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/cipolla-algorithm \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":2,"p":7}'const res = await fetch("https://api.kit.forhosting.com/numth/cipolla-algorithm", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": 2,
"p": 7
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/cipolla-algorithm",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": 2,
"p": 7
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/cipolla-algorithm", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":2,"p":7}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":2,"p":7}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/cipolla-algorithm", 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
{
"a": 2,
"p": 7
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.cipolla_algorithm",
"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
Questa capacità verifica che p sia un primo dispari, rifiuta i non residui con un errore invalid_input chiaro, esegue una costruzione di Cipolla completamente deterministica (senza estrazioni casuali di omega) e restituisce entrambe le radici quando esistono.
Cos'è una radice quadrata modulare e quando si applica Cipolla
La costruzione fallisce proprio quando a è un non residuo, cosa che questo endpoint segnala come invalid_input anziché inventare una radice finta.
Contratto di ingresso, passi dell'algoritmo e forma della risposta
Il valore assoluto di a non deve superare un bilione. Poi moltiplica nell'anello degli elementi x più y volte radice di w, elevando omega più radice di w alla potenza (p più uno) su due con moltiplicazioni modulari esatte BigInt. Esempio: a uguale a due e p uguale a sette produce le radici tre e quattro, perché tre al quadrato è nove, cioè due modulo sette. Invii un corpo JSON con due campi interi obbligatori: a, il numero di cui vuole la radice quadrata modulo p, e p, un primo dispari tra tre e un bilione inclusi. Ogni campo può arrivare come numero JSON o come stringa di cifre con segno opzionale. Campi mancanti, non interi, fuori intervallo, p pari e p composto falliscono con invalid_input e non vengono addebitati. Se a_mod è zero la risposta è la radice banale zero con method trivial_zero e omega null. Altrimenti il simbolo di Legendre di a_mod modulo p è calcolato via criterio di Eulero; il valore meno uno significa che a è un non residuo quadratico e l'attività fallisce con un messaggio che nomina la classe di residuo. Quando il simbolo è più uno l'algoritmo cerca il più piccolo omega non negativo tale che il Legendre di omega al quadrato meno a_mod sia meno uno — questa scansione è deterministica, quindi la stessa coppia usa sempre lo stesso testimone. La componente nel campo è una radice quadrata; l'API restituisce entrambe le radici ordinate, la radice primaria minore preferita, il testimone omega, method uguale a cipolla e verified true dopo un controllo interno del quadrato.
Dove le radici quadrate modulari di Cipolla creano valore
Le aule che trattano i residui quadratici possono mostrare che la residualità da sola non basta e poi chiamare questo endpoint per esibire le radici reali di molti residui senza calcolare a mano potenze nel campo di estensione. I notebook di ricerca che già calcolano simboli di Legendre o Jacobi possono richiedere la radice solo quando il simbolo è uno, pagando $0.002 per elemento riuscito e nulla in caso di fallimenti di validazione.
Casi di integrazione
Programmazione competitiva e correzione LMS
I correttori verificano le risposte di radice quadrata modulare, rifiutano non residui e moduli composti con invalid_input e mantengono omega deterministico tra le esecuzioni.
Domande tecniche
Quanto costa lo strumento di radice quadrata modulare di Cipolla?
Lo strumento nel browser è gratuito. Le richieste API usano il saldo prepagato KIT a $0.002 per chiamata riuscita; l'input non valido non viene addebitato.