Kalkulator modulo

Reszta (a mod b)
Dalej

Operacja modulo (lub “mod”) zwraca resztę z dzielenia całkowitego: 17 mod 5 = 2, ponieważ 17 = 3·5 + 2. To serce arytmetyki zegara, kryptografii, funkcji skrótu oraz wzorca “co N-ty wiersz” w SQL. Ten kalkulator przyjmuje operandy całkowite lub dziesiętne, wyraźnie pokazuje iloraz i resztę oraz obsługuje różnice w konwencji znaku między językami (% w Pythonie ≠ % w C dla liczb ujemnych).

Jak obliczyć a mod b

  1. 1

    Wpisz dzielną (a) i dzielnik (b)

    Dowolne liczby; liczby dziesiętne i ujemne są dozwolone.

  2. 2

    Wybierz konwencję znaku

    Dzielenie z obcięciem (C, Java, Go), dzielenie z zaokrągleniem w dół (Python, Ruby, konwencja matematyczna).

  3. 3

    Odczytaj iloraz i resztę

    a = q·b + r, z wybraną regułą dla znaku r.

  4. 4

    Zobacz wyrażenie matematyczne

    Podstawione wartości uwidaczniają każdy krok.

Dwie konwencje dla liczb ujemnych

Dla operandów dodatnich wszystkie konwencje są zgodne: 17 mod 5 = 2. Dla liczb ujemnych języki się różnią:

Język -17 mod 5 Konwencja
Python, Ruby 3 Zaokrąglanie w dół
C, Java, Go, JS -2 Obcinanie
Podręczniki matematyki 3 Zaokrąglanie w dół (zwykle)

Dzielenie z zaokrągleniem w dół: iloraz zaokrągla się w stronę −∞. Reszta zawsze ma znak dzielnika: ten sam znak co b. Dzielenie z obcięciem: iloraz zaokrągla się w stronę zera. Reszta ma znak dzielnej: ten sam znak co a.

Dla a = -17, b = 5:

  • Obcięcie: q = -3 (zaokrąglone w stronę 0), r = -17 − (-3)·5 = -2.
  • Zaokrąglenie w dół: q = -4 (zaokrąglone w stronę -∞), r = -17 − (-4)·5 = 3.

Oba są poprawne w ramach swojej konwencji. Wybierz tę, która pasuje do twojego języka.

Gdzie pojawia się modulo

  • Czas. Minuty w godzinie, dni tygodnia, sekundy w dobie, wszystko to arytmetyka modulo.
  • Tablice mieszające. hash(key) mod table_size wybiera kubełek.
  • Szeregowanie karuzelowe (round-robin). task_i mod worker_count przydziela pracę.
  • Kryptografia. RSA i Diffie-Hellman opierają się na mod n z ogromnymi liczbami pierwszymi.
  • Co N-ty wiersz. W SQL: WHERE id % 3 = 0.
  • Sprawdzenie parzystości. n mod 2 == 0 oznacza liczbę parzystą.
  • Naprzemienne wzory. Pasy w wierszach, kolorowanie co drugiego elementu.
  • Bufory cykliczne. (index + 1) mod size zawija się na początek.

Przydatne tożsamości

  • (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 można obliczyć szybkim potęgowaniem modularnym w czasie O(log k), kluczowe dla kryptografii dużych liczb.
  • a mod 1 = 0 dla każdej liczby całkowitej a.
  • a mod a = 0.

Modulo liczb dziesiętnych

Dla liczb rzeczywistych naturalna definicja to a mod b = a − b · floor(a/b). 7.5 mod 2.5 = 0, ponieważ 7,5 jest dokładną wielokrotnością. 7.6 mod 2.5 = 0.1.

Operator % w JavaScripcie działa na liczbach rzeczywistych; fmod w Pythonie wykonuje rzeczywiste modulo z obcięciem; % w Pythonie wykonuje rzeczywiste modulo z zaokrągleniem w dół.

Rozwiązane przykłady

  • 100 mod 7: 100 = 14·7 + 2, więc reszta 2.
  • 25 mod 4: 25 = 6·4 + 1, więc reszta 1.
  • -10 mod 3 (zaokrąglenie w dół): -10 = -4·3 + 2, reszta 2. (Obcięcie dałoby -1.)
  • 17.5 mod 5: 17,5 = 3·5 + 2,5, reszta 2,5.

Najczęściej zadawane pytania

W większości przypadków to synonimy. Formalnie “modulo” często oznacza konwencję matematyczną (zaokrąglanie w dół), a “remainder” (reszta) zwykle odnosi się do wariantu z obcięciem (styl C). Nazwy te przenikają do dokumentacji języków; gdy ma to znaczenie, jasno określ konwencję.

Python stosuje konwencję matematyczną (zaokrąglanie w dół), przez co znak reszty odpowiada znakowi dzielnika. C stosuje konwencję sprzętowej jednostki ALU (obcięcie), w której znak reszty odpowiada znakowi dzielnej. Żadna nie jest błędna; to po prostu różne wybory.

Nie, dzielenie przez zero jest niezdefiniowane. Kalkulator zwraca błąd dla b = 0.

Zwykle tak. Sprawdź specyfikację swojego języka pod kątem obsługi liczb ujemnych, Python i Ruby różnią się od C, Java, Go i JavaScript.

Do matematyki w stylu RSA z liczbami 2048-bitowymi użyj dedykowanej biblioteki (pow(a, b, n) w Pythonie, BigInteger.modPow w Javie). Ten kalkulator obsługuje codzienne wartości, a nie wartości klasy kryptograficznej.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach