Eksempler på praktisk bruk av modulo

Transcription

Eksempler på praktisk bruk av modulo
Diskret matematikk tirsdag 13. oktober 2015
Eksempler på praktisk bruk av modulo-regning.
Tverrsum
Tverrsummen til et heltall er summen av tallets sifre.
Eksempel.
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
Diskret matematikk tirsdag 13. oktober 2015
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.
Eksempel.
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
Diskret matematikk tirsdag 13. oktober 2015
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.
Eksempel.
Gitt tallet 3794. Dette kan skrives slik:
3∙1000 + 7∙100 + 9∙10 + 4 = 3∙103 + 7∙102 + 9∙101 + 4∙100
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
379410 = x∙123 + y∙122 + z∙121 + u∙120 = xyzu12
Tallene x, y, z og u er gitt ved x = 2, y = 2, z = 4 og u = 2.
Dermed blir 379410 = 224212.
Hvordan vi finner x, y, z og u kommer vi straks til.
3
Diskret matematikk tirsdag 13. oktober 2015
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.
Eksempel.
379410, 101102, 1768, A2F316
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
Diskret matematikk tirsdag 13. oktober 2015
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 = 379410 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
Diskret matematikk tirsdag 13. oktober 2015
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 = sngn + sn-1gn-1 + sn-2gn-2 + ……+s2g2 + s1g1 + s0g0
der 0 ≤ si< g for i = 0, 1, 2, 3, …., n
6
Diskret matematikk tirsdag 13. oktober 2015
Eksempel.
Vi finner siste siffer ved s0 = a mod g. Så setter vi a = a div g.
Dermed neste siffer s1 = a mod g. osv.
Eksempel
La a = 123410 og g = 8:
Fra binært tall til oktalte, heksadesimale og desimale tall
Gitt a = 11011011100101102
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
Diskret matematikk tirsdag 13. oktober 2015
Dermed blir 11011011100101102 = 1556268.
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 = 1011011100101102
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
1011011100101102 = 5B9616
8
Diskret matematikk tirsdag 13. oktober 2015
9