Kuinka modulo 103 lasketaan

sedemik

Neuvokaa viisaammat kuinka saan laskettua modulo 103 -algoritmin tarkisteen. Osaan laskea kyllä arvoparien ja niiden painoarvojen tulojen summan, mutta mitäs sitten tapahtuu?

9

3943

Äänestä

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • modula modulus

      Modulo 103 tarkoittaa yksinkertaisesti kokonaislukujaon jakojäännöstä. Osamäärää emme siis halua, vain jakojäännöksen kokonaislukuna.

      Ohjelmointikielissä kokonaisjaon jakojäännöstä yleensä merkitään prosenttimerkillä %

      Jos lasket suoraan kokonaisluvuilla:
      esim.
      110 % 103 = 7
      koska 110 - 103 = 7
      (ja enempää ei voi vähentää)
      ja 1 * 103 7 = 110 (tarkistus)

      300 % 103 = 94
      koska 300 - 103 - 103 = 94
      (ja enempää ei voi vähentää)
      ja 2 * 103 94 = 300 (tarkistus)

      Jos lasket desimaaliluvuilla
      esim.
      300 / 103 = 2,912621359223300970873786407767
      Kokonaisjaon osamäärä olisi siis 2
      300 - 2 * 103 = 94
      Joten 300 % 103 = 94

      Modulo 103 on siis aina välillä 0 ... 102 (kun puhutaan positiivisista luvuista)
      Jos modulo 103 on nolla, on ko. luku (tasan) jaollinen luvulla 103.

      • *h-moilanen*

        Ohjelmointikielissä eroja negatiivisilla luvuilla esim. C laskee:
        -10%3 = -1
        eli -10 = -3*3 -1
        Python taasen laskee (kongruenssin tapaan):
        -10%3 = 2
        eli -10 = -4*3 2

        Yllättäen myös jakolasku menee eri tavalla:
        C: -10/3 = -3
        Python: -10/3 = -4

        Toisaalta wikipediassa lukee: "Kun x ja y ovat kokonaislukuja ja x > y, ne voidaan esittää yhtälönä x = a * y r, missä a on luonnollinen luku ja 0 < r < |y|. Lukua a kutsutaan usein jakolaskun x/y osamääräksi ja lukua r jakojäännökseksi."

        Siis pitää olla x > y ja -10 < 3, joten jakolaskua -10/3 ei kai sitten ole määritelty. Kongruenssissa kuitenkin määritellään myös tapauksia x < y.
        Siis miten tää nyt oikein menee?


      • njotta.
        *h-moilanen* kirjoitti:

        Ohjelmointikielissä eroja negatiivisilla luvuilla esim. C laskee:
        -10%3 = -1
        eli -10 = -3*3 -1
        Python taasen laskee (kongruenssin tapaan):
        -10%3 = 2
        eli -10 = -4*3 2

        Yllättäen myös jakolasku menee eri tavalla:
        C: -10/3 = -3
        Python: -10/3 = -4

        Toisaalta wikipediassa lukee: "Kun x ja y ovat kokonaislukuja ja x > y, ne voidaan esittää yhtälönä x = a * y r, missä a on luonnollinen luku ja 0 < r < |y|. Lukua a kutsutaan usein jakolaskun x/y osamääräksi ja lukua r jakojäännökseksi."

        Siis pitää olla x > y ja -10 < 3, joten jakolaskua -10/3 ei kai sitten ole määritelty. Kongruenssissa kuitenkin määritellään myös tapauksia x < y.
        Siis miten tää nyt oikein menee?

        Jos kaksi kokonaislukua a ja b ovat samat modulo M, merkitään a = b (mod M), niin a-b = kM jollain kokonaisluvulla k. Niiden erotus on siis M:n monikerta.

        Nyt C:ssä -10%3 = -1 ja pythonissa -10%3 = 2, mutta selvästihän -1 = 2 (mod 3), koska -1-2=-3=(-1)*3. Määritelmällisesti jos jaetaan x y:llä, niin saadaan x = by r, jossa jakojäännökselle pätee 0


      • *h-moilanen*
        njotta. kirjoitti:

        Jos kaksi kokonaislukua a ja b ovat samat modulo M, merkitään a = b (mod M), niin a-b = kM jollain kokonaisluvulla k. Niiden erotus on siis M:n monikerta.

        Nyt C:ssä -10%3 = -1 ja pythonissa -10%3 = 2, mutta selvästihän -1 = 2 (mod 3), koska -1-2=-3=(-1)*3. Määritelmällisesti jos jaetaan x y:llä, niin saadaan x = by r, jossa jakojäännökselle pätee 0

        Englanninkielinen wiki selittää homman:
        http://en.wikipedia.org/wiki/Remainder#The_case_of_general_integers

        Ja suomenkielinen väärin:
        http://fi.wikipedia.org/wiki/Jakojäännös


      • *h-moilanen*
        *h-moilanen* kirjoitti:

        Ohjelmointikielissä eroja negatiivisilla luvuilla esim. C laskee:
        -10%3 = -1
        eli -10 = -3*3 -1
        Python taasen laskee (kongruenssin tapaan):
        -10%3 = 2
        eli -10 = -4*3 2

        Yllättäen myös jakolasku menee eri tavalla:
        C: -10/3 = -3
        Python: -10/3 = -4

        Toisaalta wikipediassa lukee: "Kun x ja y ovat kokonaislukuja ja x > y, ne voidaan esittää yhtälönä x = a * y r, missä a on luonnollinen luku ja 0 < r < |y|. Lukua a kutsutaan usein jakolaskun x/y osamääräksi ja lukua r jakojäännökseksi."

        Siis pitää olla x > y ja -10 < 3, joten jakolaskua -10/3 ei kai sitten ole määritelty. Kongruenssissa kuitenkin määritellään myös tapauksia x < y.
        Siis miten tää nyt oikein menee?

        Niin, ja toi jakolaskuhan menee molemmilla C:llä ja Pythonilla matemaattisesti väärin, oikein tietysti olisi kokonaisluku/kokonaisluku => rationaaliluku tai kokonaisluku jos menee tasan.
        Esim. Lispillä menee oikein:
        (/ -10 3) => -10/3 (rationaaliluku)
        (/ -6 3) => -2 (kokonaisluku)

        Lispissä myös jakojäännökselle ja modulolle omat:
        (mod -10 3) => 2
        (rem -10 3) => -1

        Pitänee olla varovainen näiden kanssa...


      • njotta.
        *h-moilanen* kirjoitti:

        Niin, ja toi jakolaskuhan menee molemmilla C:llä ja Pythonilla matemaattisesti väärin, oikein tietysti olisi kokonaisluku/kokonaisluku => rationaaliluku tai kokonaisluku jos menee tasan.
        Esim. Lispillä menee oikein:
        (/ -10 3) => -10/3 (rationaaliluku)
        (/ -6 3) => -2 (kokonaisluku)

        Lispissä myös jakojäännökselle ja modulolle omat:
        (mod -10 3) => 2
        (rem -10 3) => -1

        Pitänee olla varovainen näiden kanssa...

        "Pythonilla matemaattisesti väärin, oikein tietysti olisi kokonaisluku/kokonaisluku => rationaaliluku tai kokonaisluku jos menee tasan. "

        Jos ollaan tarkkoja, niin rationaaliluku se on kokonaislukukin, mutta tämä ei ole oleellista. Oleellista on ymmärtää miten tietokoneet toimivat. Kun ymmärtää miten luvut tietokoneessa esitetään sisäisesti, niin näiden pienten ihmeellisyyksien tajuaminen helpottuu huomattavasti. Eli C:ssä tuo varsinainen jakolasku suoritetaan ja tulos tallennetaan niin tarkasti kuin se pystytään - se vaan ei satu aina olemaan tarkka tulos vaan "tarkin mahdollinen". Toisaalta lispin antama -10/3 ei sinällään välttämättä kerro kysyjälle paljoa, kyseinen luku pitää yleensä evaluoida desimaaliluvuksi, jolloin laskutoimitus on tietyssä mielessä "laskettu". Kyseessähän on vastaava tilanne, kuin jos laskin antaisi vastauksen sqrt(2) kysymykseen paljonko on neliöjuuri kakkosesta :)


      • *h-moilanen*
        njotta. kirjoitti:

        "Pythonilla matemaattisesti väärin, oikein tietysti olisi kokonaisluku/kokonaisluku => rationaaliluku tai kokonaisluku jos menee tasan. "

        Jos ollaan tarkkoja, niin rationaaliluku se on kokonaislukukin, mutta tämä ei ole oleellista. Oleellista on ymmärtää miten tietokoneet toimivat. Kun ymmärtää miten luvut tietokoneessa esitetään sisäisesti, niin näiden pienten ihmeellisyyksien tajuaminen helpottuu huomattavasti. Eli C:ssä tuo varsinainen jakolasku suoritetaan ja tulos tallennetaan niin tarkasti kuin se pystytään - se vaan ei satu aina olemaan tarkka tulos vaan "tarkin mahdollinen". Toisaalta lispin antama -10/3 ei sinällään välttämättä kerro kysyjälle paljoa, kyseinen luku pitää yleensä evaluoida desimaaliluvuksi, jolloin laskutoimitus on tietyssä mielessä "laskettu". Kyseessähän on vastaava tilanne, kuin jos laskin antaisi vastauksen sqrt(2) kysymykseen paljonko on neliöjuuri kakkosesta :)

        Kyllä Lispissä on ihan "oikea" tyyppi rationaaliluvuille, eikä sitä muuteta liukuluvuiksi keskinäisissä laskuissa.
        Itseasiassa siten että rational-tyypin alaluokkina ovat integer ja ratio (=kaksi kokonaislukua).
        Ts. se vastaa tuota "rationaaliluku se on kokonaislukukin"-hommaa.
        Testataan Lispissä onko 5 kokonaisluku:
        (integerp 5) => T
        Onko se rationaaliluku:
        (rationalp 5) => T
        Entäs reaali- tai kompleksiluku?
        (realp 5) => T
        (complexp 5) => NIL

        Lisäksi se näköjään supistaa automaattisesti ratiot:
        (rational 4/6) => 2/3
        Ja muuttaa tarvittaessa integer-tyypiksi:
        (integerp (rational 6/6)) => T

        http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node16.html


    • Onko ongelmasi siinä, millä tavalla lasketaan se luku, josta tarkistussumma pitäisi laskea, vaiko siinä, miten jakojäännös modulo 103 saadaan kyseisestä luvusta?

    • jh

      HUOM:
      Esim. pankkien käyttämien virtuaaliviivakoodien kohdalla käytetään kyseistä algoritmiä ja siellä on jaettava niin isoja lukuja joihin tietokoneet eivät suoraan pysty. Luku on käsiteltävä stringinä ja jaettava osissa. Esim. seuraavasti: ota ekat 9 numeroa, muunna luvuksi ja moduloi se, liitä tulokseen seitsämän seuraavaa numeroa ja moduloi vastaavasti jne. kunnes luku on riittävän pieni moduloitavaksi lopullisesti.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Takaisin ylös

    Luetuimmat keskustelut

    1. Mitään järkeä?

      Että ollaan erillään? Kummankin pää on kovilla.
      Ikävä
      120
      1767
    2. Noniin rakas

      Annetaanko pikkuhiljaa jo olla, niin ehkä säilyy vienot hymyt kohdatessa. En edelleenkään halua sulle tai kenellekään mi
      Ikävä
      99
      1588
    3. Lasten hyväksikäyttö netissä - Joka 3. nuori on saanut seksuaalisen yhteydenoton pedofiililtä

      Järkyttävää! Lapsiin kohdistuva seksuaalinen hyväksikäyttö verkossa on yhä pahempi ongelma. Ulkolinja: Lasten hyväksikäy
      Maailman menoa
      48
      1099
    4. Kumpi vetoaa enemmän sinuun

      Kaivatun ulkonäkö vai persoonallisuus? Ulkonäössä kasvot vai vartalo? Mikä luonteessa viehättää eniten? Mikä ulkonäössä?
      Ikävä
      43
      984
    5. Multa sulle

      Pyörit 24/7 mielessä, kuljet mun mukana, mielessä kyselen sun mielipiteitä, vitsailen sulle, olen sydän auki, aitona. M
      Ikävä
      29
      929
    6. Nainen, olen tutkinut sinua paljon

      Salaisuutesi ei ole minulle salaisuus. Ehkä teimme jonkinlaista vaihtokauppaa kun tutkisimme toisiamme. Meillä oli kumm
      Ikävä
      50
      856
    7. Mies, eihän sulla ole vaimoa tai naisystävää?

      Minusta tuntuu jotenkin, että olisit eronnut joskus, vaikka en edes tiedä onko se totta. Jos oletkin oikeasti edelleen s
      Ikävä
      44
      822
    8. Olet myös vähän ärsyttävä

      Tuntuu, että olet tahallaan nuin vaikeasti tavoiteltava. En tiedä kauanko jaksan tätä näin.
      Ikävä
      37
      780
    9. Okei nyt mä ymmärrän

      Olet siis noin rakastunut, se selittää. Onneksesi tunne on molemminpuolinen 😘
      Ikävä
      56
      778
    10. Onko sulla empatiakykyä?

      Etkö tajua yhtään miltä tämä tuntuu minusta? Minä ainakin yritän ymmärtää miltä sinusta voisi tuntua. En usko, että olet
      Ikävä
      37
      760
    Aihe