Eksempler på praktisk bruk av modulo-regning. Tverrsum Tverrsummen til et heltall er summen av tallets sifre. a = 7358. Tverrsummen til a er lik 7 + 3 + 5 + 8 = 23. Setning. La sum(a) stå for tverrsummen til a. Da er a sum(a)(mod 9) Dvs. a er kongruent med sin tverrsum modulo 9. Bevis. Tallet a har et bestemt antall siffer. Her tenker vi oss at a har fire siffer. Beviset kan gjøres på tilsvarende måte hvis har et annet antall siffer. La de fire sifrene til a være x, y, z og u: a = xyzu. (f.eks. hvis a = 3758 er x = 3, y = 7, z = 5 og u = 8) Tallet a kan skrives som a = 1000x + 100y + 10z + u. mens tverrsummen sum(a) = x + y + z + u I følge definisjonen er a b(mod m ) hvis m går opp i (a b). Her blir b = sum(a) og m = 9, og vi får da a sum(a) = 999x + 99y + 9z = 9(111x + 11y +z) 1
Siden 9 er faktor betyr det at 9 går opp i a sum(a). Med andre ord er a kongruent med tverrsummen til a modulo 9: a sum(a)(mod 9). Gjentatt tverrsum. Den gjentatte tverrsummen til et tall a er det tallet vi får ved å ta tverrsummen til tverrsummen osv. til vi ender opp med et ensifret tall. La = 3758. Tverrsummen til a blir 3 + 7 + 5 + 8 = 23. Tverrsummen til 23 = 5. Dette betyr at 3758 5(mod 9). Stemmer det? Ja, fordi 3758 5 = 3753 = 417 9. Vi ser at 9 er faktor og 9 går derfor opp i 3758. Følgelig er a og kongruent med den gjentatte tverrsummen til a modulo 9. Testing av svar i et regnestykke. La a og b være hele tall, og la g(a) være den gjentatte tverrsummen til a og g(b) den gjentatte tverrsummen til b. Da har vi a g(a)(mod 9) og b g(b)(mod 9). I følge regnereglene for kongruenser får vi a b g(a) g(b)(mod 9) La f. eks. a = 3758 og b = 347. Tar vi den gjentatte tverrsummen av tallene får vi g(a) = 5 og g(b) = 5 Da blir g(a) g(b)= 5 5= 25 der tverrsummen blir 2 + 5 = 7. 2
Dette betyr at g(ab), dvs. den gjentatte tverrsummen g(ab) også må bli 7. Vi sjekker: 3758 347 = 1304026 g(1304026) = g(1+3+4+2+6) = g(16) = 1 + 6 = 7. Vi fikk som ventet 7 begge ganger. Hvis vi i utregningen av ab hadde fått et svar som ikke hadde 7 som gjentatt tverrsum, så må svaret være feil. Hvis vi imidlertid bytter om to siffer i et korrekt svar vil ikke denne testen avsløre det! Avsnitt 4.2 fra læreboka Tallsystemer. Heltall oppgis vanligvis i det desimale tallsystemet, også kalt 10-tallssystemet. Gitt tallet 3794. Dette kan skrives slik: 3 1000 + 7 100 + 9 10 + 4 = 3 10 3 + 7 10 2 + 9 10 1 + 4 10 0 Tallet 10 kalles for grunntallet i det desimale tallsystem. Alle hele tall g > 1 kan være grunntall i et tallsystem. Eksempel: La f.eks g = 12. Da finnes det tall x, y, z og u som alle er fra 0 til 11 slik at 3794 10 = x 12 3 + y 12 2 + z 12 1 + u 12 0 = xyzu 12 Tallene x, y, z og u er gitt ved x = 2, y = 2, z = 4 og u = 2. Dermed blir 3794 10 = 2242 12. Hvordan vi finner x, y, z og u kommer vi straks til. 3
I databehandlingen brukes stort sett grunntallene 2, 8, 10 og 16. Brukes flere tallsystemer i samme tekst er det vanlig å oppgi tallets grunntall som indeks. 3794 10, 10110 2, 176 8, A2F3 16 I Java kan en oppgi tall på binær form ved å sette 0b foran tallet, oktal form med 0 foran tallet og heksadesimal form med 0x foran tallet: 4
Konvertering mellom tallsystemer. Fra desimal til binær. Vi viser teknikken ved hjelp av et eksempel. Metoden blir tilsvarende for de andre tallsystemene. La a = 3794 10 Vi setter opp følgende skjema: Algoritmen er slik: a mod 2 gir siste binære siffer. Så setter vi a lik a div 2. Dermed vil a mod 2 neste gang gi nest siste siffer. Fortsetter på samme måte til vi har fått alle sifrene. 5
Følgende javakode bruker denne teknikken for å konvertere et tall i 10-tallssystemet til et tall i det tallsystemet vi selv måtte ønske ut fra grunntallet vi velger: Hvis grunntallet vi velger er større enn 10, brukes bokstavene i alfabetet til å representere tallene over 10: A = 10, B = 11, C = 12, D = 13 osv. Kjør programmet selv og test ut med forskjellige grunntall! Generell teknikk. Gitt et grunntall g > 1 og et positivt heltall a. Da kan a skrives entydig på formen: a = s n g n + s n-1 g n-1 + s n-2 g n-2 + +s 2 g 2 + s 1 g 1 + s 0 g 0 der 0 s i < g for i = 0, 1, 2, 3,., n 6
Vi finner siste siffer ved s 0 = a mod g. Så setter vi a = a div g. Dermed neste siffer s1 = a mod g. osv. Eksempel La a = 1234 10 og g = 8: Fra binært tall til oktalte, heksadesimale og desimale tall Gitt a = 1101101110010110 2 Hvis vi skal finne a som oktalt tall grupperer vi tre og tre siffer fra høyre mot venstre: Hver gruppe på tre konverteres til et oktalt siffer etter følgende regel: 7
Dermed blir 1101101110010110 2 = 155626 8. OBS! Hvis det er færre enn 3 siffer i gruppen lengst til venstre, kan vi legge til en eller to 0-er slik at det blir tre siffer. Eksempel Heksadesimale tall. La a = 101101110010110 2 Grupper fire og fire binære siffer fra høyre mot venstre: Gruppen lengst til venstre har kun tre siffer. Da kan vi legge på en ekstra 0 forrest slik at vi får 0101. Sifrene i hver gruppe konvergeres til et heksadesimalt siffer etter følgende tabell: Dette gir tallet 101101110010110 2 = 5B96 16 8
9