Modulokalkylator

Rest (a mod b)
Nästa

Modulooperationen (eller “mod”) ger resten efter heltalsdivision: 17 mod 5 = 2 eftersom 17 = 3·5 + 2. Den är kärnan i klockaritmetik, kryptografi, hashfunktioner och mönstret “var N:e rad” i SQL. Den här kalkylatorn accepterar heltals- eller decimaloperander, visar kvoten och resten explicit och hanterar skillnaderna i teckenkonvention mellan språk (% i Python ≠ % i C för negativa tal).

Så beräknar du a mod b

  1. 1

    Ange täljaren (a) och nämnaren (b)

    Vilka tal som helst; decimaler och negativa tal är tillåtna.

  2. 2

    Välj teckenkonvention

    Trunkerad division (C, Java, Go), nedåtavrundad division (Python, Ruby, matematisk konvention).

  3. 3

    Läs av kvoten och resten

    a = q·b + r, med den valda regeln för tecknet på r.

  4. 4

    Se det matematiska uttrycket

    Insatta värden gör varje steg synligt.

Två konventioner för negativa tal

För positiva operander är alla konventioner överens: 17 mod 5 = 2. För negativa tal skiljer sig språken åt:

Språk -17 mod 5 Konvention
Python, Ruby 3 Nedåtavrundad
C, Java, Go, JS -2 Trunkerad
Matematikläroböcker 3 Nedåtavrundad (oftast)

Nedåtavrundad division: kvoten avrundas mot −∞. Resten har alltid samma tecken som nämnaren: samma tecken som b. Trunkerad division: kvoten avrundas mot noll. Resten har samma tecken som täljaren: samma tecken som a.

För a = -17, b = 5:

  • Trunkerad: q = -3 (avrundad mot 0), r = -17 − (-3)·5 = -2.
  • Nedåtavrundad: q = -4 (avrundad mot -∞), r = -17 − (-4)·5 = 3.

Båda är korrekta inom sin konvention. Välj den som passar ditt språk.

Var modulo dyker upp

  • Tid. Minuter på en timme, veckodagar, sekunder på ett dygn, allt är moduloaritmetik.
  • Hashtabeller. hash(key) mod table_size väljer en hink.
  • Round robin-schemaläggning. task_i mod worker_count fördelar arbete.
  • Kryptografi. RSA och Diffie-Hellman bygger på mod n med enorma primtal.
  • Var N:e rad. I SQL: WHERE id % 3 = 0.
  • Jämn/udda-kontroll. n mod 2 == 0 betyder jämnt.
  • Växlande mönster. Randning av rader, färgläggning av varannat element.
  • Cirkulära buffertar. (index + 1) mod size slår runt.

Användbara identiteter

  • (a + b) mod n = ((a mod n) + (b mod n)) mod n
  • (a · b) mod n = ((a mod n) · (b mod n)) mod n
  • (a^k) mod n kan beräknas med snabb modulär exponentiering i O(log k), avgörande för kryptografi med stora tal.
  • a mod 1 = 0 för varje heltal a.
  • a mod a = 0.

Decimal modulo

För reella tal är den naturliga definitionen a mod b = a − b · floor(a/b). 7.5 mod 2.5 = 0 eftersom 7,5 är en exakt multipel. 7.6 mod 2.5 = 0.1.

Operatorn % i JavaScript fungerar på reella tal; fmod i Python gör trunkerad reell modulo; % i Python gör nedåtavrundad reell modulo.

Lösta exempel

  • 100 mod 7: 100 = 14·7 + 2, alltså rest 2.
  • 25 mod 4: 25 = 6·4 + 1, alltså rest 1.
  • -10 mod 3 (nedåtavrundad): -10 = -4·3 + 2, rest 2. (Trunkerad skulle ge -1.)
  • 17.5 mod 5: 17,5 = 3·5 + 2,5, rest 2,5.

Vanliga frågor

För det mesta är de synonymer. Formellt antyder “modulo” ofta den matematiska konventionen (nedåtavrundad), medan “remainder” (rest) ofta syftar på den trunkerade varianten (C-stil). Namnen läcker in i språkens dokumentation; när det spelar roll, ange konventionen uttryckligen.

Python följer den matematiska konventionen (nedåtavrundad), vilket gör att restens tecken matchar nämnaren. C följer hårdvarans ALU-konvention (trunkerad), där restens tecken matchar täljaren. Ingen är fel; det är olika val.

Nej, division med noll är odefinierad. Kalkylatorn returnerar ett fel för b = 0.

Oftast, ja. Kontrollera ditt språks specifikation för hantering av negativa tal, Python och Ruby skiljer sig från C, Java, Go och JavaScript.

För RSA-liknande matematik med 2048-bitars tal, använd ett särskilt bibliotek (pow(a, b, n) i Python, BigInteger.modPow i Java). Den här kalkylatorn hanterar vardagliga värden, inte värden av kryptografisk klass.

Relaterade verktyg

Verktyget finns på andra språk