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