Skip to main content
🟢 Beginner

Modulo-laskin – Jäännöslaskin

Laske jakolaskun jäännös (modulo). Laske a mod b välittömästi askeleittaisen selityksen kera. Ilmainen matematiikkalaskin, tarkat tulokset heti.

Mitä modulo-operaatio on?

Modulo-operaatio (mod, tai %) palauttaa lopun, kun yksi luku jaetaan toisella. Modulo a:lle b:lle: jakaa a b:llä, ja tuloksena on lopu. Esimerkiksi 17 mod 5 = 2 (koska 17 = 3 × 5 + 2). Tulos on aina välillä [0, b-1] positiivisille arvoille.

Perusyhteys: a = q × b + r, missä q on jakojäännös (floor(a/b)) ja r on lopu (0 ≤ r < b). Modulo on yhteys jakolaskuun — jos a ÷ b = q lopun r, niin a mod b = r. Tässä laskuri käyttää oikeaa matemaattista modulo-määritelmää (aina ei-negatiivista positiiville jakajalle), eikä sitä signaattista jäännöstä, jota jotkut ohjelmointikielit käyttävät.

Modulaarinen aritmetiikka — aritmetiikka vakiollisella moduulilla, jossa luvut "kierretään" — muodostaa kellon aritmetiikan perustan. Kellon tunteja lasketaan mod 12 tai mod 24. Jos on 10 aamulla ja lisätään 5 tuntia: (10 + 5) mod 12 = 3 (PM). Tämä kierroslasku on keskeinen osa lukuteorian, kryptografia ja tietokoneiden algoritmeissa.

Modulo-esimerkit ja askeleittaiset ratkaisut

Modulo-operaation ymmärtäminen tulee intuitiiviseksi esimerkkien avulla. Jokaisen laskun muodossa on seuraava formula: jäännös = a - floor(a ÷ b) × b.

EsimerkkiJakojäännös (floor)Lopu (a mod b)Verifio
17 mod 5323 × 5 + 2 = 17 ✓
20 mod 4505 × 4 + 0 = 20 ✓
7 mod 3212 × 3 + 1 = 7 ✓
100 mod 714214 × 7 + 2 = 100 ✓
13 mod 13101 × 13 + 0 = 13 ✓
1 mod 5010 × 5 + 1 = 1 ✓
256 mod 1616016 × 16 + 0 = 256 ✓
365 mod 752152 × 7 + 1 = 365 ✓

Huomaa, että 365 mod 7 = 1: tämä kertoo, että ei-vuoden on 52 täysi viikko plus 1 lisäpäivä, joten viikonpäivä siirtyy yhden vuoden aikana yhdellä. Vuodenpäivä (366 päivää) mod 7 = 2, siirtymä on kaksi.

Modulo-operaation sovellukset

Modulo-operaatio esiintyy ohjelmoinnissa ja matematiikassa. Parillisuustarkistus: jos n % 2 == 0, n on parillinen. Ympyrämäiset listat ja ring-buffers: indeksi = (nykyinen indeksi + 1) % array_size kiertää alkuun. Hash-taulukot: salkku = hash(key) % num_buckets määrittää mistä tahansa hash-arvon salkun indeksin, varmistamalla, ettei tapahdu leikkausrajapyyntö.

Ohjelmistotieteen kalenterilaskuissa käytetään mod 7 viikonpäivän aritmeettisessa laskussa. Zellerin fomula ja Doomsday-algoritmi molemmat perustuvat modulaariseen aritmeettiseen laskuun, jotta voidaan määrittää mikä päivä on viikonpäivä mistä tahansa päivästä. Tämä toimii, koska on 7 päivää viikossa — vakiollinen moduuli. Aikavyöhykkeiden offsetit käyttävät mod 24 kiertämään tunnit oikein yli keskipäivän rajapyyntöjen yli.

Ohjelmistotieteen digitaalisissa järjestelmissä modulo on käytössä kaikissa muistin osoitteiden yhteydessä. Sivutaulukoiden sisällöt, cache-setin valinta ja muistin karttavirtauskaistojen valinta kaikki perustuvat modulaariseen indeksointiin. CPU-instruktioiden joukko sisältää yleensä jäännös (modulo-tyyppinen) komennon yhdessä jakolaskun kanssa, ja SIMD-vektoreiden komennet käyttävät modulaarista indeksointia kääntämiseen.

Ohjelmistotieteen virheenetsinnässä käytetään syklisiä redundanssitarkistuksia (CRC) ja tarkistuksia (checksum) polynomiaalisen modulaarisen aritmeettisen laskun avulla GF(2). Luottokorttien numeroita tarkistetaan Luhn-algoritmin (mod 10) avulla. ISBN-10 -kirjanumerot käyttävät mod 11. Tämä tarkistus havaitsee transponointi- ja yksittäisen sarakkeen virheet numeroiden koodissa.

Modulo kryptografia

Modulaarinen aritmetiikka on nykyisen avoimen avainkryptografian matemaattinen perusta. Kolme tärkeintä kryptografista algoritmiä — RSA, Diffie-Hellman ja elliptinen käyräkryptografia — perustuvat operaatioihin, jotka suoritetaan modulaarisen suureen suureen.

RSA-salaus käyttää modulaarista potenssiin: salataan viesti M julkisen avaimen (e, n) avulla, lasketaan C = M^e mod n. Salataksesi, lasketaan M = C^d mod n, missä d on salainen avain. Turvallisuus perustuu n:n (suuriin semiprimiin) jakamisen vaikeuteen — tiedostamalla vain n, p ja q:n on laskettavaa tietokonetta, jossa avaimen koko on yli 2048 bittiä.

Diffie-Hellmanin avaimenvaihto sallii kahden osapuolen välisen salaisen avaimen luomisen epäluotettavalla kanavalla: Alice lähettää A = g^a mod p, Bob lähettää B = g^b mod p. Kumpikaan osapuoli ei voi paljastaa salaisen avaimen ilman ratkaistuaan diskreettista logaritmiikkaa.

Tämän järjestelmän turvallisuus perustuu modulaarisen potenssin yksisuuntaiseen luonteeseen: lasketaan g^a mod p on nopea (käyttäen toistuvaa neliintämistä, O(log a) kertolaskuja), mutta kääntäminen — löytää g^a mod p — on uskotaan vaativan eksponentiaalista aikaa suurille p:lle.

Modulo negatiivisten lukujen kanssa ja ääriolosuhteet

Modulo-olosuhteet negatiivisten lukujen kanssa vaihtelevat ohjelmointikielen mukaan, mikä aiheuttaa monia vaikeasti löydettäviä virheitä. Ymmärrys siitä on tärkeää ohjelmistokehittäjille.

Kieli-7 % 37 % -3Definition
Python2-2Signifio seuraavaan jakajaan (tosi modulo)
JavaScript-11Signifio seuraavaan jakamoon (jäännös)
C / C++-11Signifio seuraavaan jakamoon (C99+)
Java-11Signifio seuraavaan jakamoon
Ruby2-2Signifio seuraavaan jakajaan (tosi modulo)
Matematiikka (määritelmä)21 (tai määrittelemätön)Aina ei-negatiivinen tulos

Matematiikassa modulo aina palauttaa ei-negatiivisen tuloksen: -7 mod 3 = 2 (koska -7 = -3×3 + 2, ja 0 ≤ 2 < 3). Tämä laskuri käyttää matemaattista määritelmää.

Turvallinen tapa varmistaa ei-negatiivinen tulos mikä tahansa kielellä: ((a % b) + b) % b. Tämä käsittää negatiiviset syötteen arvot oikein ja käytetään sisäisesti laskurimme. Tämä malli on tärkeää, kun käytetään moduloa taulukon indeksointiin tai kalenterin päivien laskuun, missä negatiiviset tulokset aiheuttaisivat virheitä.

Ääriolosuhteita muistaa: (1) Minkä tahansa luvun mod 1 = 0 — jakaminen 1:llä jättää jäännäisen. (2) Minkä tahansa luvun mod itseään = 0. (3) 0 mod minkä tahansa ei-nollaisen lukun = 0. (4) Jakaminen (ja modulo) nollalla on määrittelemätön — aina validoi jakaja ennen moduolaskua. Laskurimme näyttää selkeän virheilmoituksen, jos moduolasku on nollalla.

Modulo- ja jakojakotestit

Modulon yksi käytännön sovellus on jakojakotestaus ilman täysjakoista. Lukua a on jaettava b:llä, jos ja vain jos a mod b = 0. Tämä mahdollistaa nopeat jakojakotarkistukset:

JaettavuusTestiEsimerkki
2n mod 2 = 0 (viimeinen desimaali on parillinen)128 mod 2 = 0 ✓
3Desimaalien summa mod 3 = 0123: 1+2+3=6, 6 mod 3 = 0 ✓
4312: 12 mod 4 = 0 ✓
5735 mod 5 = 0 ✓
9Desimaalien summa mod 9 = 0369: 3+6+9=18, 18 mod 9 = 0 ✓
10n mod 10 = 0 (viimeinen desimaali on 0)500 mod 10 = 0 ✓

Jaettavuussäännöt ovat lyhenteitä modulaarikertalaskennan ominaisuuksista. Desimaalien summa- ja jakojakosäännöt 3:lle ja 9:lle toimivat, koska 10 ≡ 1 (mod 3) ja 10 ≡ 1 (mod 9), mikä tarkoittaa, että kunkin desimaalin sijaintiarvo on sivuva jakojakotarkistuksessa 3:lle tai 9:lle. Näitä sääntöjä opetetaan peruskoulussa ilman modulaarikertalaskennan yhteyttä, mutta taustalla on modulaarikertalaskenta.

Modulaarikertolaskenta: Nopea Potenssi Mod

Laskee suoraan a^b mod n, ensin laskee a^b, sitten ottaa mod n, on epäkäytännöllistä suurille potensseille – a^100 voi olla tuhansia desimaleja. Modulaarikertolaskenta käyttää identiteettiä (a×b) mod n = ((a mod n) × (b mod n)) mod n pitämään välivaiheet pieninä.

Nopea algoritmi käyttää toistuvaa neliöintiä (binääripotenssi):

Tämä pienentää kertolaskuja b:sta O(log₂ b) asti. B = 2048-bittinen RSA-eksponentti (~10^600), tämä on ero triljoonien kertolaskujen ja vain ~2000 välillä. Ilman tämän optimoinnin RSA-salaus olisi täysin epäkäytännöllinen.

Usein kysytyt kysymykset

Mikä on 15 mod 4?

15 mod 4 = 3. Koska 15 = 3×4 + 3, jäännös on 3. Vahvista: 3×4 = 12, ja 15 − 12 = 3. ✓

Mikä on mod 0?

Modulo nolla on määriteltyä, kuten jakoa nolla. Voit ei voi laskuttaa mod 0. Käyttämämme laskuri palauttaa virheilmoituksen tässä tapauksessa. Kaikki jakolaskuun perustuvat operaatiot vaativat nollan sijaan positiivisen jakajan.

Miten modulio liittyy jakojakoon?

Luku a on jaettavissa luvulla b, jos ja vain jos a mod b = 0. Esimerkiksi 24 mod 6 = 0, joten 24 on jaettavissa 6:lla. 25 mod 6 = 1, joten 25 ei ole jaettavissa 6:lla. Tämä tekee modulon perustavan työkalun jakojakon testaamiseen tietojenkäsittelyssä.

Mikä on ero mod ja jäännöksen välillä?

Positiivisten lukujen kohdalla mod ja jäännös ovat samat. Negatiivisten lukujen kohdalla ne poikkeavat: matemaattinen modulo palauttaa aina ei-negatiivisen tuloksen (merkki seuraa jakajaa), kun taas jäännös ottaa jakamisen merkkin. Esimerkiksi -7 mod 3 = 2 (matematiikka), mutta -7 jäännös 3 = -1 (kuten C, Java, JavaScript).

Mikä on 10 mod 3?

10 mod 3 = 1. Koska 10 = 3×3 + 1, jäännös on 1. Voit vahvistaa: 3×3 = 9, ja 10 − 9 = 1. Tämä tarkoittaa, että 10 jättää jäännöksen 1, kun se jaetaan 3:lla, joten 10 ei ole jaettavissa 3:lla.

Mikä on 0 mod 5?

0 mod 5 = 0. Nolla jaetaan minkä tahansa positiivisen lukun kanssa antaa kertoimena 0 ja jäännöksenä 0. Yleisesti 0 mod n = 0 mistä tahansa n ≠ 0. Tämä on yhtenäinen määritelmän kanssa: 0 = 0×5 + 0.

Miten modulioa käytetään ohjelmoinnissa?

Yleisiä ohjelmointikäyttökohteita ovat: tarkistaa parillisuus/parittomuus (n%2==0), kiertää array-alkioiden indeksejä (indeksi%pituus), toteuttaa ring-buffers, jakaa kohteita säiliöihin hash-taulukossa (hash%koko), kiertää tila-tiloja tila-automatissa, ja varmistaa, että aikakausitapahtumat sytyy joka n:s kierroksella (laskuri%n==0).

Mikä on kelloaritmetiikka?

Kelloaritmetiikka on jokapäiväistä modulaariaritmetiikkaa. 12-tuntinen kello käyttää mod 12: 11 kelloa + 3 tuntia = (11+3) mod 12 = 2 kelloa. Tämä kiertävä käyttäytyminen on tarkalleen modulaariaritmetiikka. Samoin viikonpäivät käyttävät mod 7, ja sotilastunnukset käyttävät mod 24 tunteja.

Miksi modulio on tärkeää kryptografiassa?

Modulaariaritmetiikka tekee mahdolliseksi yksisuuntaiset funktiot. Laskeminen g^a mod p (annetun g, a, p) on nopea, mutta löytääkseen g^a mod p ja p (disjunktin logaritmi ongelma) on laskennallisesti mahdollista suuriin p-primaaleihin. Tämä epätasapaino on pohjana Diffie-Hellmanin avaimenvaihdolle, RSA:lle ja suurimmalle osalle julkiselle avaimelle suojaa internetin viestintää.

Mikä on minkä tahansa luvun mod 1?

Minkä tahansa kokonaisluvun mod 1 = 0. Jakamalla 1 aina jää jäännös 0 – jokainen kokonaisluku on täysin jakautunut 1:lle. Tämä on matemaattisesti yhtenäinen: a = a×1 + 0, joten jäännös on aina 0. Tämä äärellinen tapaus on tärkeää käsittää modulaariaritmetiikan toteutuksissa.

Modulo aritmeettisyyden käyttäminen arjessa: käytännön esimerkit

Moduloaritmeettisyyttä esiintyy arjessa paljon useammin kuin useimmat ihmiset ymmärtävät. Kun luet kelloa, laskee viikonloppuisen tapahtuman toistuvuutta, tarkistat, onko luku jaettavissa 9:llä, tai katsoo viimeisen numeron vuodesta, jotta tiedät, millä päivällä viikonpäivä on syntymäpäivän sijaan, teet moduloaritmeettistä laskua – vaikka et käytä nimeä siitä.

Aikataulutus ja toistuvuus: Jos tapahtuma tapahtuu 7 päivän välein ja tänään on tiistai (päivä 2, 0 indeksoiden mukaan sunnuntai=0), niin 30 päivää myöhemmin on (2+30) mod 7 = 32 mod 7 = 4, mikä on torstai. Tämä suoran lasku on nopeampi kuin laskeminen viikkojen ja päivien erikseen. Samoin, jos tilaus uusuu 28. päivällä kuukaudessa ja se on tällä hetkellä 15. päivä, niin päivien määrä uudelleenalkuun on (28-15) mod 31 = 13 päivää.

Digitoidut tarkistukset: ISBN-13 -bar-koodi standardi käyttää mod 10. Mikä tahansa ISBN-13 -numeron viimeinen numero valitaan siten, että kaikkien 13 numeron painotettu summa on jaettavissa 10:llä. Jos sinä virheellisesti kirjoitat yhden numeron, tarkistus epäonnistuu (mod 10 ≠ 0) ja virhe ilmoitetaan. Luottokorttien numerot käyttävät Luhn-algoritmiä – mod-10 tarkistusta – saman tarkoituksen vuoksi. ISBN-10 standardi käyttää mod 11, mikä mahdollistaa yksittäisten sijoitusten havaitsemisen.

Tietokoneen muisti ja osoitukset: RAM on yleensä osoitettu 2:n potensseissa (1024, 2048, 4096 tavua sivulla). Kun ohjelma käyttää muistia, käyttöjärjestelmä käyttää moduloa laskemaan, mihin muistisivuun osoite kuuluu: sivunumero = osoite mod sivukoko. Cache-rivin valinta CPU-keskussa käyttää moduloa samoin. Ääninäytteen bufferin ympäripyöriminen, verkkopaketin jono, sekä videon lataus kaikki käyttävät pyörivän bufferin matematiikkaa: kirjoitusasento = (kirjoitusasento + 1) % bufferin koko.

Taidetta ja musiikin malleja: Rytmiikkaa musiikin teoriassa analysoidaan moduloaritmeettisesti. 4/4 -aikataulu on 0, 1, 2, 3 -sävelta - mod-4 -säike. Polyrytmit syntyvät, kun kaksi itsenäistä rytmiä, jotka ovat m ja n -jaksoja, soivat samanaikaisesti; ne synkronoivat joka m:n ja n:n yhteisen kertoimella. Visuaalisia malleja, kuten tiilien tesselaatiot, toistuvat modulaaristen jaksojen mukaan kaksiulotteisessa tilassa.

Maantieteelliset ja aikavyöhykkeiden laskut: UTC-ajankohtaista siirtymää on -12:sta +14:ään. Aikavyöhykkeiden välisen muuntaminen: annettu aika T UTC:stä, paikallinen aika = (T + siirtymä) mod 24. Tulos voi näyttää epäilyttävältä (esim. 23 + 5 = 28, mod 24 = 4, mikä tarkoittaa 4:00 aamulla seuraavana päivänä), mutta modulaarilasku hoitaa keskipäivän rajan oikein. Kansainvälisen päiväntasaajan ylitykset käyttävät mod 24 yhdistettynä päivän viikonpäivän laskuun mod 7.

Ymmärtäessäsi moduloa nämä arjessa tapahtuvat laskut selkeämmiksi, nopeammiksi ja vähemmän virheellisiksi. Kun näet mallia, huomaat moduloaritmeettisen käytön kääntäjän optimoinnissa, rotaatioalgoritmeissa videopelissä, rotaatiokilpailujen aikataulussa ja palvelinryhmien tasapainotukseen liittyvissä asioissa – kaikki perustuvat yksinkertaiseen, mutta voimakkaaseen modulaarisen jakson jäännöslaskuun.