Competitive Programming Academy · leksjon

Modulær invers ved hjelp av Fermat

Divider trygt under en modulus

Leksjon 3 av 413 trinn

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 == 1

Primtall 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 == 1

Utled 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) % p

Beregn 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) % MOD

Inverter 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. ✅

Gratis å komme i gang

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

  1. Regn modulo et primtall
  2. Rask modulær eksponentiering
  3. Modulær invers ved hjelp av Fermat
  4. nCr med forhåndsberegnede fakulteter
← Tilbake til Competitive Programming Academy