Förberedelse inför kodningsintervjuer · Lektion

Modulär invers via Fermat

Dividera säkert modulo en modul

Lektion 3 av 413 steg

Modulär invers via Fermat är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Division fungerar inte med en modul

Addition, subtraktion och multiplikation fungerar bra med en modul, men vanlig division gör det inte. Du kan inte bara dividera och sedan ta resten. ⚠️

Ersätt division med multiplikation

Lösningen är den modulära inversen: division med x blir multiplikation med inversen till x. Alltså blir a / b modulo m lika med a multiplicerat med inversen till b.

Vad en invers är

Inversen till x är det tal som ger 1 när det multipliceras med x modulo modulen. Den spelar rollen av 1/x i vanlig aritmetik.

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

Primtal gör det möjligt

En invers finns bara när x och m saknar gemensamma faktorer. En primtalsmodul som 1e9+7 garanterar att varje x som inte är noll har en invers.

Fermats lilla sats

Fermats lilla sats säger att x upphöjt till p minus 1 är kongruent med 1 för ett primtal p, så länge x inte är en multipel av p.

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

Härled inversen

Bryt ut en faktor x, så måste resten vara dess invers. Alltså är inversen till x x upphöjt till p minus 2, taget modulo p.

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

Beräkna den med snabb exponentiering

Den exponenten är enorm, så använd den snabba exponentiering från förra lektionen. I Python gör ett enda anrop till pow hela jobbet åt Dig.

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

Använd den för division

För att beräkna a dividerat med b modulo modulen multiplicerar Du a med inversen till b. Resten är exakt den riktiga kvoten modulo p.

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

Invertera aldrig noll

Det finns ingen invers till 0, eftersom inget gånger noll blir ett. Kontrollera att Du inte dividerar med ett värde som blir noll modulo modulen.

Kostnaden för en invers

Varje invers med Fermats sats är en snabb exponentiering och kostar därför O(log p) tid. Det är billigt för några få divisioner, men kostnaden växer om Du gör miljontals.

Tips om inverser i grupper

När Du behöver många inverser kan Du förberäkna dem med en smart linjär genomgång i stället för att använda pow för varje element. Du kommer att behöva detta för nCr härnäst.

Snabb kontroll

Vilken potens ger den modulära inversen modulo ett primtal?

Sammanfattning

Du kan nu dividera modulo ett primtal genom att multiplicera med den modulära inversen, som beräknas som x upphöjt till p minus 2 med pow. Invertera bara aldrig noll. ✅

Gratis att börja

Lär dig Förberedelse inför kodningsintervjuer med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
90
Lektioner
360

Vanliga frågor

Är lektionen ”Modulär invers via Fermat” gratis?

Ja – hela texten till ”Modulär invers via Fermat” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Vad lär jag mig i ”Modulär invers via Fermat”?

Dividera säkert modulo en modul Ni övar på Förberedelse inför kodningsintervjuer med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Förberedelse inför kodningsintervjuer?

Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Modulär invers via Fermat”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Förberedelse inför kodningsintervjuer-lektionen?

Ja. Varje Förberedelse inför kodningsintervjuer-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Arbeta modulo ett primtal
  2. Snabb modulär exponentiering
  3. Modulär invers via Fermat
  4. nCr med förberäknade fakulteter
← Tillbaka till Förberedelse inför kodningsintervjuer