Modulær invers ved hjelp av Fermat
Divider trygt under en modulus
Modulær invers ved hjelp av Fermat er en gratis leksjon i Competitive Programming Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Competitive Programming Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Competitive Programming Academy inneholder totalt 4 leksjoner.
Divisjon fungerer ikke modulo
Addisjon, subtraksjon og multiplikasjon oppfører seg fint modulo en modul, men vanlig divisjon gjør ikke det. Du kan ikke bare dividere og ta resten. ⚠️
Bytt ut divisjon med multiplikasjon
Løsningen er den modulære inversen: divisjon med x blir til multiplikasjon med inversen til x. Dermed blir a / b modulo m til a multiplisert med inversen til b.
Hva en invers er
Inversen til x er tallet som gir 1 når det multipliseres med x modulo modulen. Den spiller rollen til 1/x i vanlig aritmetikk.
# x * inv(x) % m == 1Primtall gjør det mulig
En invers finnes bare når x ikke har noen felles faktor med m. En primtallsmodul som 1e9+7 garanterer at alle x som ikke er null, har en invers.
Fermats lille teorem
Fermats lille teorem sier at for et primtall p er x opphøyd i p − 1 kongruent med 1, så lenge x ikke er et multiplum av p.
# x^(p-1) % p == 1Utled inversen
Skill ut én faktor x, så må resten være inversen til x. Derfor er inversen til x x opphøyd i p − 2, tatt modulo p.
# inv(x) = x^(p-2) % pBeregn den med rask eksponentiering
Denne eksponenten er enorm, så bruk rask eksponentiering fra forrige leksjon. I Python gjør ett kall til pow hele jobben for deg.
inv = pow(x, MOD - 2, MOD)Bruk den til å dividere
For å beregne a delt på b modulo multipliserer du a med inversen til b. Resten er nøyaktig den sanne kvotienten modulo p.
ans = a * pow(b, MOD - 2, MOD) % MODInverter aldri null
Det finnes ingen invers til 0, siden ingenting multiplisert med null blir én. Pass på at du ikke dividerer med en verdi som blir null modulo modulen.
Kostnaden for én invers
Hver invers ved Fermats metode er én rask eksponentiering, så den bruker O(log p)-tid. Det er billig for noen få divisjoner, men blir mye hvis du gjør millioner av dem.
Tips: beregn inverser i grupper
Når du trenger mange inverser, kan du forhåndsberegne dem med ett smart lineært gjennomløp i stedet for å kalle pow for hvert element. Du får bruk for dette i nCr snart.
Rask sjekk
Hvilken potens gir den modulære inversen modulo et primtall?
Oppsummering
Du kan nå dividere modulo et primtall ved å multiplisere med den modulære inversen, som finnes som x opphøyd i p − 2 ved hjelp av pow. Inverter bare aldri null. ✅
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Modulær invers ved hjelp av Fermat» gratis?
Ja – hele teksten i «Modulær invers ved hjelp av Fermat» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Competitive Programming Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Competitive Programming Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Modulær invers ved hjelp av Fermat»?
Divider trygt under en modulus Du øver på Competitive Programming Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Competitive Programming Academy?
Ingen tidligere erfaring er nødvendig. Competitive Programming Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Modulær invers ved hjelp av Fermat»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Competitive Programming Academy-leksjonen?
Ja. Alle Competitive Programming Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Regn modulo et primtall
- Rask modulær eksponentiering
- Modulær invers ved hjelp av Fermat
- nCr med forhåndsberegnede fakulteter