Inverso modulare tramite Fermat
Dividere in sicurezza sotto un modulo
Inverso modulare tramite Fermat è una lezione Competitive Programming Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Competitive Programming Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Competitive Programming Academy include 4 lezioni in totale.
La divisione non funziona con il modulo
Addizione, sottrazione e moltiplicazione si comportano bene con un modulo, ma la semplice divisione no. Non è possibile dividere e poi applicare il resto. ⚠️
Sostituire la divisione con la moltiplicazione
La soluzione è l'inverso modulare: dividere per x diventa moltiplicare per l'inverso di x. Quindi a / b mod m si trasforma in a moltiplicato per l'inverso di b.
Cos'è un inverso
L'inverso di x è il numero che, moltiplicato per x con il modulo applicato, dà 1. Svolge il ruolo di 1/x nell'aritmetica ordinaria.
# x * inv(x) % m == 1I numeri primi lo rendono possibile
Un inverso esiste solo quando x non condivide alcun fattore con m. Usare un modulo primo come 1e9+7 garantisce che ogni x diverso da zero abbia un inverso.
Entra in scena il piccolo teorema di Fermat
Il piccolo teorema di Fermat afferma che, per un primo p, x elevato alla potenza p meno 1 è congruo a 1, purché x non sia un multiplo di p.
# x^(p-1) % p == 1Derivare l'inverso
Separando un fattore x, il resto deve essere il suo inverso. Quindi l'inverso di x è x elevato alla potenza p meno 2, calcolato modulo p.
# inv(x) = x^(p-2) % pCalcolarlo con la potenza rapida
Quell'esponente è enorme, quindi usi l'esponenziazione rapida della lezione precedente. In Python, una sola chiamata a pow esegue l'intera operazione.
inv = pow(x, MOD - 2, MOD)Usarlo per dividere
Per calcolare a diviso b con il modulo, moltiplichi a per l'inverso di b. Il resto è esattamente il quoziente reale modulo p.
ans = a * pow(b, MOD - 2, MOD) % MODNon invertire mai zero
Non esiste l'inverso di 0, poiché nessun numero moltiplicato per zero dà uno. Eviti di dividere per un valore che si riduce a zero con il modulo.
Costo di un singolo inverso
Ogni inverso di Fermat richiede una potenza rapida, quindi ha un costo di O(log p). È conveniente per poche divisioni, ma il costo si accumula se ne esegue milioni.
Suggerimento: inversi in blocco
Quando servono molti inversi, li precalcoli con un unico passaggio lineare ingegnoso invece di usare un pow per elemento. Questa tecnica servirà per nCr nella prossima lezione.
Verifica rapida
Quale potenza fornisce l'inverso modulare quando il modulo è primo?
Riepilogo
Ora sa eseguire divisioni con un modulo primo moltiplicando per l'inverso modulare, ottenuto come x elevato alla potenza p meno 2 tramite pow. Non inverta mai zero. ✅
Domande Frequenti
La lezione «Inverso modulare tramite Fermat» è gratuita?
Sì — il testo completo di «Inverso modulare tramite Fermat» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Competitive Programming Academy, passa a CoddyKit PRO. Il corso Competitive Programming Academy include 4 lezioni in totale.
Cosa imparerò in «Inverso modulare tramite Fermat»?
Dividere in sicurezza sotto un modulo Eserciti Competitive Programming Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Competitive Programming Academy?
Non è richiesta alcuna esperienza precedente. Competitive Programming Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Inverso modulare tramite Fermat»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Competitive Programming Academy?
Sì. Ogni lezione Competitive Programming Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Lavorare modulo un numero primo
- Esponenziazione modulare rapida
- Inverso modulare tramite Fermat
- nCr con fattoriali precalcolati