Forberedelse til kodeinterviews · Lektion

Modulær invers via Fermat

Divider sikkert under et modulus

Lektion 3 af 413 trin

Modulær invers via Fermat er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Division fungerer ikke modulo

Addition, subtraktion og multiplikation fungerer fint modulo et tal, men almindelig division gør ikke. Du kan ikke bare dividere og tage resten. ⚠️

Erstat division med multiplikation

Løsningen er den modulære invers: division med x bliver til multiplikation med inversen af x. Så a / b modulo m bliver til a ganget med inversen af b.

Hvad en invers er

Inversen af x er det tal, der giver 1, når det ganges med x modulo et tal. Den spiller rollen som 1/x i almindelig aritmetik.

# x * inv(x) % m == 1

Primtal gør det muligt

En invers findes kun, når x ikke har nogen fælles faktor med m. Et primmodul som 1e9+7 garanterer, at alle x bortset fra 0 har en invers.

Fermats lille sætning

Fermats lille sætning siger, at for et primtal p er x opløftet til p minus 1 kongruent med 1, så længe x ikke er et multiplum af p.

# x^(p-1) % p == 1

Udled inversen

Isolér én faktor x, så må resten være dens invers. Derfor er inversen af x x opløftet til p minus 2, taget modulo p.

# inv(x) = x^(p-2) % p

Beregn den med hurtig potensberegning

Den eksponent er enorm, så brug den hurtige eksponentiering fra den forrige lektion. I Python klarer ét kald til pow hele arbejdet for dig.

inv = pow(x, MOD - 2, MOD)

Brug den til division

For at beregne a divideret med b modulo et tal skal du gange a med inversen af b. Resultatet er nøjagtigt den sande kvotient modulo p.

ans = a * pow(b, MOD - 2, MOD) % MOD

Invertér aldrig nul

Der findes ingen invers til 0, eftersom intet gange nul giver én. Kontrollér, at du ikke dividerer med en værdi, der bliver til nul modulo tallet.

Omkostningen ved én invers

Hver invers med Fermats metode er én hurtig potensberegning, så den tager O(log p) tid. Det er billigt ved nogle få divisioner, men løber op, hvis du udfører millioner.

Tip til mange inverser

Når du skal bruge mange inverser, kan du beregne dem på forhånd med et smart lineært gennemløb i stedet for én pow pr. element. Det får du brug for til nCr lige om lidt.

Hurtigt tjek

Hvilken potens giver den modulære invers modulo et primtal?

Opsummering

Du kan nu dividere modulo et primtal ved at gange med den modulære invers, som findes som x opløftet til p minus 2 med pow. Invertér bare aldrig nul. ✅

Gratis at komme i gang

Lær Forberedelse til kodeinterviews med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
90
Lektioner
360

Ofte stillede spørgsmål

Er lektionen “Modulær invers via Fermat” gratis?

Ja — hele teksten til “Modulær invers via Fermat” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Modulær invers via Fermat”?

Divider sikkert under et modulus Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?

Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Modulær invers via Fermat”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?

Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Arbejd modulo et primtal
  2. Hurtig modulær eksponentiering
  3. Modulær invers via Fermat
  4. nCr med forberegnede fakulteter
← Tilbage til Forberedelse til kodeinterviews