Skip to content
Calculator Collection

Moduloräknare

Beräkna a mod b – resten när dividenden a divideras med divisorn b. Grundläggande för klockaritmetik, cykliska mönster, hashning, paritetstest, modulär aritmetik inom kryptografi och alla beräkningar med "cyklisk återgång".

Last updated: May 2026

Jämför med liknande

Om denna räknare

Modulooperationen ("mod") returnerar resten vid heltalsdivision. Formellt gäller för heltal a (dividenden) och b (divisorn, b ≠ 0) att modulon r uppfyller a = b·q + r, där q är kvoten och r är resten. Enligt matematisk konvention gäller 0 ≤ r < |b|, men de flesta programmeringsspråk (inklusive JavaScript, som används här) definierar a % b så att resultatet tar dividendens tecken – a % b kan alltså vara negativt när a är negativt. Den här kalkylatorn implementerar JavaScripts %-operator direkt. Variabler: a är dividenden, b är den nollskilda divisorn. Kantfall: b = 0 är odefinierat (division med noll – JavaScript returnerar NaN); för flyttalsindata tillämpar JavaScript ändå %, vilket ger en "rest" härledd från decimalandelen (t.ex. 5,5 % 2 = 1,5). Negativa tal: i JavaScript ger -7 % 3 = -1, medan den "matematiska" moden ger 2; för att alltid få icke-negativa rester använder du ((a % b) + b) % b. Modulooperationen är grunden för cyklisk aritmetik – att avläsa tid på ett 12-timmarsklocka, beräkna veckodag, validera kortnummer via Luhn, generera pseudoslumptal och implementera hashtabeller bygger alla på den. Varje sats i elementär talteori (Fermats lilla sats, Eulers sats, CRT) formuleras i termer av kongruenser modulo n. Relationen a ≡ b (mod n) innebär att a − b är delbart med n; modulo definierar en ekvivalensrelation som delar in heltalen i n disjunkta klasser.

Hur du använder den

Exempel 1 – Test för jämnt/udda tal. Är 17 jämnt eller udda? Beräkna 17 mod 2. Ange Dividend = 17, Divisor = 2. Resultat: 1. ✓ Rest 0 innebär jämnt; rest 1 innebär udda. Alltså är 17 udda. Detta är den enklaste tillämpningen av modulo: paritetstest är universellt i programmering (`if (n % 2 === 0)`), i matematiken (bevis om jämna och udda tal) och i vardagen (omväxlande element, schemaläggning). Exempel 2 – Veckodagsaritmetik. Idag är måndag (dagindex 1, där söndag = 0). Vilken dag är det om 100 dagar? Beräkna 100 mod 7. Ange Dividend = 100, Divisor = 7. Resultat: 2. ✓ Alltså är det måndag + 2 dagar = onsdag om 100 dagar. Hela kalendern bygger på modulär aritmetik: veckodagar upprepar sig mod 7, timmar mod 24 (eller mod 12 om man bortser från fm/em), månader mod 12. Varje fråga av typen "vad kommer tillbaka till start var N:te steg?" är en modulofråga.

Vanliga frågor

Vad är skillnaden mellan modulo och rest?

Inom matematiken behandlas de vanligtvis som synonymer – båda syftar på vad som blir kvar efter division. Men programmeringsspråk skiljer dem åt när operanderna har olika tecken. Den matematiska moden definieras alltid ge ett icke-negativt resultat i [0, |b|), så -7 mod 3 = 2 (eftersom -7 = 3·(-3) + 2). De flesta C-liknande språk (inklusive JavaScript, Java, C, C++) använder en "rest"-definition där resultatet tar dividendens tecken: -7 % 3 = -1. Python och ett fåtal andra språk använder den matematiska definitionen: -7 % 3 = 2. Den här kalkylatorn använder JavaScripts definition. För att konvertera från JavaScripts resultat till det matematiska, använd ((a % b) + b) % b.

Varför är modulo så viktigt inom datavetenskap och kryptografi?

Modulär aritmetik finns överallt inom datavetenskap eftersom den naturligt beskriver cykliska och begränsade system: arrayindexering (modulo N för cyklisk återgång), hashtabeller (modulo antal hinkar), pseudoslumptalsgeneratorer (linjära kongruensgeneratorer), checksummor (mod 10 för Luhn, mod 11 för ISBN) och klockaritmetik. Inom kryptografi är modulo kärnoperationen: RSA-kryptering arbetar i ℤ/nℤ där n är produkten av två stora primtal; Diffie-Hellman-nyckelutbyte opererar modulo ett primtal; elliptisk kurva-kryptografi använder modulo ett primtal för att definiera ett ändligt fält. Säkerheten i dessa system bygger på svårigheten hos "inversa" operationer under modulo – diskret logaritm, modulära kvadratrötter, faktorisering – som är beräkningsmässigt svåra trots att de direkta operationerna är enkla.

Hur fungerar modulo med negativa tal?

Det beror på språket eller konventionen. JavaScript (som den här kalkylatorn använder) returnerar ett resultat med samma tecken som dividenden: -7 % 3 = -1, 7 % -3 = 1, -7 % -3 = -1. Python använder divisorns tecken: -7 % 3 = 2, 7 % -3 = -2. Den matematiska konventionen (som används inom talteori) returnerar alltid ett icke-negativt resultat i [0, |b|): -7 mod 3 = 2. I de flesta praktiska situationer i JavaScript eller C, om du vill ha den alltid icke-negativa matematiska moden, använder du ((a % b) + b) % b. Skillnaden kan orsaka svårfångade buggar vid portning av kod mellan språk, vid arbete med negativa arrayindex eller vid implementering av kryptografiska algoritmer – kontrollera alltid vilken konvention ditt språk och ditt bibliotek använder.

Vilka är de vanligaste misstagen med modulo?

Det första är division med noll – a % 0 är odefinierat och ger NaN i JavaScript eller ett körningsfel i de flesta språk. Det andra är att glömma teckenbeteendet med negativa dividender; att använda % på negativa värden utan eftertanke kan ge fel på ett steg i kod som förutsätter icke-negativa rester. Det tredje är att blanda ihop % med /: heltalsdivision ger kvoten, modulo ger resten, och de är kompletterande operationer. Det fjärde är att använda % på flyttalsindata och förvänta sig heltalsbeteende – 5,5 % 2 är 1,5, inte ett fel, men kanske inte det du ville ha. Det femte är att jämföra moduloresultat med en konstant utan att ta hänsyn till divisorns storlek (`if (a % 100 == 1)` är ett annat test än `if (a % 1000 == 1)`, även om båda har en 1 i resultatet). Slutligen kan modulooperationer inom kryptografi som utförs för tidigt läcka information om mellanvärdet via tidsmätningssidokanaler; konstant-tids moduläroperationer är ett eget delområde.

När bör jag inte använda den här kalkylatorn?

Hoppa över den för icke-heltals-"mod"-operationer på irrationella tal eller symboliska uttryck – sådant kräver ett CAS, inte en numerisk kalkylator. Använd den inte för den strikt "matematiska moden" med alltid icke-negativa resultat på negativa indata utan att justera utdata enligt beskrivningen ovan. Det är fel verktyg för beräkning av modulär invers (att hitta x sådant att a·x ≡ 1 mod n); det kräver den utökade euklidiska algoritmen eller Fermats lilla sats, vilket inte är vad % beräknar. Undvik den för modulär exponentiering med stora tal (a^b mod n med b i tusental eller mer) – naiv beräkning orsakar spill; använd upprepad kvadrering med reduktion i varje steg. Slutligen bör du inte använda rå % för kryptografiska operationer på stora heltal i JavaScript – dess Number-typ förlorar precision ovanför 2⁵³ − 1, så använd BigInt eller ett dedikerat stornummerbibliotek för allt verkligt kryptografiskt arbete.

Källor och referenser