Algebra. voor Informaticastudenten Getallen. Ernic Kamerich. Jean Delville: de school van Plato



Vergelijkbare documenten
1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12

Getaltheorie I. c = c 1 = 1 c (1)

RSA. F.A. Grootjen. 8 maart 2002

2 n 1. OPGAVEN 1 Hoeveel cijfers heeft het grootste bekende Mersenne-priemgetal? Met dit getal vult men 320 krantenpagina s.

Getallenleer Inleiding op codeertheorie. Cursus voor de vrije ruimte

7.1 Het aantal inverteerbare restklassen

OPLOSSINGEN VAN DE OEFENINGEN

Oefening 4.3. Zoek een positief natuurlijk getal zodanig dat de helft een kwadraat is, een derde is een derdemacht en een vijfde is een vijfdemacht.

Opmerking. TI1300 Redeneren en Logica. Met voorbeelden kun je niks bewijzen. Directe en indirecte bewijzen

Oefening 4.3. Zoek een positief natuurlijk getal zodanig dat de helft een kwadraat is, een derde is een derdemacht en een vijfde is een vijfdemacht.

Getaltheorie II. ax + by = c, a, b, c Z (1)

1. REGELS VAN DEELBAARHEID.

Dossier 3 PRIEMGETALLEN

Opgeloste en onopgeloste mysteries in de getaltheorie

Rekenen aan wortels Werkblad =

Eigenschap (Principe van welordening) Elke niet-lege deelverzameling V N bevat een kleinste element.

Enkele valkuilen om te vermijden

Oplossing van opgave 6 en van de kerstbonusopgave.

We beginnen met de eigenschappen van de gehele getallen.

1.5.1 Natuurlijke, gehele en rationale getallen

Hoofdstuk 6. Congruentierekening. 6.1 Congruenties

Geldwisselprobleem van Frobenius

Uitwerkingen Rekenen met cijfers en letters

Opgaven Eigenschappen van Getallen Security, 2018, Werkgroep.

1.3 Rekenen met pijlen

1 Rekenen met gehele getallen

Bijzondere kettingbreuken

Diophantische vergelijkingen

PG blok 4 werkboek bijeenkomst 4 en 5

Getallen, 2e druk, extra opgaven

Priemontbinding en ggd s

Zomercursus Wiskunde. Module 1 Algebraïsch rekenen (versie 22 augustus 2011)

Groepen, ringen en velden

1 Kettingbreuken van rationale getallen

7 Deelbaarheid. 7.1 Deelbaarheid WIS7 1

Combinatoriek groep 1 & 2: Recursie

1 Rekenen in eindige precisie

In Katern 2 hebben we de volgende rekenregel bewezen, als onderdeel van rekenregel 4:

1 Complexe getallen in de vorm a + bi

Memoriseren: Een getal is deelbaar door 10 als het laatste cijfer een 0 is. Of: Een getal is deelbaar door 10 als het eindigt op 0.

Basisvaardigheden algebra. Willem van Ravenstein Den Haag

Zomercursus Wiskunde. Katholieke Universiteit Leuven Groep Wetenschap & Technologie. September 2008

Finaletraining Nederlandse Wiskunde Olympiade

REKENVAARDIGHEID BRUGKLAS

OP WEG NAAR WISKUNDE. Plusboek uit de serie Het Grote Rekenboek Uitgeverij ScalaLeukerLeren.nl

Willem van Ravenstein

Algebra, Les 18 Nadruk verboden 35

Je hebt twee uur de tijd voor het oplossen van de vraagstukken. µkw uitwerkingen. 12 juni 2015

2.1 Bewerkingen [1] Video Geschiedenis van het rekenen ( 15 x 3 = 45

Universiteit Gent. Academiejaar Discrete Wiskunde. 1ste kandidatuur Informatica. Collegenota s. Prof. Dr.

Worteltrekken modulo een priemgetal: van klok tot cutting edge. Roland van der Veen

Polynomen. + 5x + 5 \ 3 x 1 = S(x) 2x x. 3x x 3x 2 + 2

Getaltheorie groep 3: Primitieve wortels

Uitwerking Puzzel 93-1, Doelloos

priemrecords? Jaap Top

Zomercursus Wiskunde. Katholieke Universiteit Leuven Groep Wetenschap & Technologie. September 2008

Hoofdstuk 1. Inleiding. Lichamen

Rekenen met cijfers en letters

Security. Eerste tentamen

1E HUISWERKOPDRACHT CONTINUE WISKUNDE

Breuken met letters WISNET-HBO. update juli 2013

Combinatoriek groep 1

D-dag 2014 Vrijeschool Zutphen VO. D -DAG 13 februari 2014: 1+ 1 = 2. (en hoe nu verder?) 1 = 2en hoe nu verder?

Katernen. regionale training. Finale

Zomercursus Wiskunde. Module 4 Limieten en asymptoten van rationale functies (versie 22 augustus 2011)

Combinatoriek groep 2

2.1 Bewerkingen [1] Video Geschiedenis van het rekenen ( 15 x 3 = 45

Finaletraining Wiskunde Olympiade

Hoofdstuk 3. Equivalentierelaties. 3.1 Modulo Rekenen

FACTORISATIE EN CRYPTOGRAFIE

Hoe je het cryptosysteem RSA soms kunt kraken. Benne de Weger

Machten, exponenten en logaritmen

1.1 Rekenen met letters [1]

Haskell: programmeren in een luie, puur functionele taal

Wanneer zijn veelvouden van proniks proniks?

ANTWOORDEN blz. 1. d = 1013; = ; = ; =

Deeltentamen I, Ringen en Galoistheorie, , 9-12 uur

ProefToelatingstoets Wiskunde B

WISKUNDE B -DAG = 2. maar en hoe nu verder? 29 november 2002

III.2 De ordening op R en ongelijkheden

Katernen. regionale training. tweede ronde. Nederlandse Wiskunde Olympiade

1 Hele getallen. Rekenen en wiskunde uitgelegd Kennisbasis voor leerkrachten basisonderwijs. Uitwerkingen van de opgaven bij de basisvaardigheden

FLIPIT 5. (a i,j + a j,i )d i d j = d j + 0 = e d. i<j

Aanvullingen bij Hoofdstuk 8

Zwakke sleutels voor RSA

Over de construeerbaarheid van gehele hoeken

Complexe e-macht en complexe polynomen

Hoofdstuk 6 : DEELBAARHEID

Examencursus. wiskunde A. Rekenregels voor vereenvoudigen. Voorbereidende opgaven VWO kan niet korter

Het RSA Algoritme. Erik Aarts - 1 -

Hoofdstuk 6 : DEELBAARHEID

Public Key Cryptography. Wieb Bosma

Wiskunde klas 3. Vaardigheden. Inhoudsopgave. 1. Breuken Gelijksoortige termen samennemen Rekenen met machten Rekenen met wortels 4

Getallen 2. Doelgroep Rekenen en Wiskunde Getallen 2

FACTORISATIE EN CRYPTOGRAFIE

x x x

VWO finales. versie oktober 2012

3 Cirkels, Hoeken en Bogen. Inversies.

Numerieke aspecten van de vergelijking van Cantor. Opgedragen aan Th. J. Dekker. H. W. Lenstra, Jr.

opgaven formele structuren deterministische eindige automaten

Transcriptie:

Algebra voor Informaticastudenten Getallen Jean Delville: de school van Plato Ernic Kamerich januari 2007

Inhoud 1 De gehele getallen.......................................................................... 1 1.1 Delen met rest................................................................. 1 1.2 Veelvouden en delers........................................................... 9 1.3 Eigenschappen van de relatie deler........................................... 10 1.4 Redeneren met getallen....................................................... 12 1.5 Priemgetallen................................................................. 15 1.6 De grootste gemene deler...................................................... 16 1.7 Het algoritme van Euclides.................................................... 17 1.8 Een belangrijke eigenschap van de grootste gemene deler....................... 20 1.9 Gehele combinaties............................................................ 21 1.10 * Het uitgebreide algoritme van Euclides........................................ 23 1.11 Relatief priem................................................................. 24 1.12 Delers van een product........................................................ 24 1.13 Gehele lineaire vergelijkingen in twee variabelen: voorbeeld.................... 26 1.14 Gehele lineaire vergelijkingen in twee variabelen: theorie....................... 28 1.15 Het kleinste gemene veelvoud.................................................. 30 1.16 Ontbinding in priemfactoren.................................................. 32 1.17 * Priemdelers van een product.................................................. 34 1.18 * De graad van een priemgetal in een getal...................................... 34 1.19 * Een bewijs van de hoofdstelling van de rekenkunde: de unieke priemfactorontbinding in Z.......................................... 37 2 Gehele getallen modulo................................................................... 39 2.1 Rekenen met restklassen...................................................... 39 2.2 De fundamentele eigenschap van de functie rest................................ 41 2.3 Restklassen................................................................... 43 2.4 De rekenoperaties en restklassen............................................... 44 2.5 Rekenen in Z mod m.......................................................... 45 2.6 Vergelijkingen van type?x: ax=b in Z modulo m.............................. 47 2.7 Nuldelers..................................................................... 50 2.8 Delen in Z modulo m......................................................... 52 2.9 In welke gevallen kun je delen in Z mod m?................................... 54 2.10 Een lichaam.................................................................. 57 2.11 Congruentie modulo m........................................................ 58 2.12 Een toepassing van modulo rekenen: random generators....................... 59 3 Codering van gehele, rationale en floating point getallen.................................... 62 3.1 Binaire notatie van gehele getallen............................................ 62 3.2 Machtsverheffen............................................................... 64 3.3 Hexadecimale notatie van gehele getallen...................................... 65 3.4 Binaire codering van gehele getallen........................................... 65 3.5 * De rationale getallen.......................................................... 67

ii 4 Machtsverheffen in Z modulo m........................................................... 69 4.1 Een rekenvoorbeeld van machtsverheffen in Z modulo m....................... 69 4.2 Het oplossen van meervoudige congruenties.................................... 71 4.3 De Chinese reststelling........................................................ 73 4.4 Reductie van rekenoperaties in Z mod mn naar Z mod m...................... 74 4.5 * De Chinese reststelling en wiskundige structuur................................ 75 4.6 Machtsverheffen............................................................... 76 4.7 Periodieke en semiperiodieke rijen van machten................................ 76 4.8 Het periodieke geval........................................................... 77 4.9 De stelling van Euler.......................................................... 78 4.10 De kleine stelling van Fermat.................................................. 79 4.11 Een generalisatie van de kleine stelling van Fermat............................ 80 4.12 Machten van eenheden in Z m.................................................. 81 4.13 Machten berekenen in Z modulo m via reductie naar factoren van m........... 85 4.14 RSA codering 1: worteltrekken................................................ 87 4.15 RSA codering 2............................................................... 88 5 Veeltermen............................................................................... 92 5.1 Veeltermen als abstracte objecten............................................. 92 5.2 Vermenigvuldigen van veeltermen over een lichaam............................ 95 5.3 Delen met rest van veeltermen over een lichaam............................... 95 5.4 Delers........................................................................ 98 5.5 De grootste gemene deler...................................................... 99 5.6 * Een bewijs voor de hoofdstelling over de grootste gemene deler van twee veeltermen......................................................... 101 5.7 * Een hulpmiddel voor berekeningen met de ggd................................ 103 5.8 * Quotienten van veeltermen................................................... 105 5.9 * Veeltermen modulo een veelterm............................................. 106 6 Complexe getallen....................................................................... 109 6.1 Notatie van complexe getallen................................................ 109 6.2 Het complexe vlak........................................................... 111 6.3 Het berekenen van het argument van een complex getal....................... 112 6.4 De complex geconjugeerde................................................... 113 6.5 Optellen meetkundig......................................................... 113 6.6 Vermenigvuldigen meetkundig................................................ 114 6.7 Machtsverheffen met natuurlijke exponenten.................................. 115 6.8 De e-macht.................................................................. 116 6.9 Eenheidswortels.............................................................. 118 6.10 Machten van complexe getallen met reële exponenten......................... 120 6.11 Wortels van complexe getallen................................................ 121 6.12 Complexe getallen en wortels................................................. 122 6.13 De gevaren van machten..................................................... 122 6.14 De verschillende manieren om complexe getallen te representeren............. 124 6.15 Kwadratische vergelijkingen.................................................. 125

iii 6.16 * Logaritme en machten van complexe getallen met complexe exponenten....... 128 7 Veeltermen ontbinden, nulpunten........................................................ 129 7.1 Veeltermfuncties............................................................. 129 7.2 Nulpunten en ontbinding..................................................... 130 7.3 Delers van veeltermen over de complexe getallen.............................. 131 7.4 * Delers van veeltermen over de reële getallen.................................. 132 7.5 * Delers van veeltermen over de rationale getallen.............................. 133 7.6 Het ontbinden van veeltermen in Z[X] en F p [X]................................. 134 Antwoorden en aanwijzingen............................................................... 135 Trefwoorden............................................................................... 158 Getallen, januari 2007 november 2007 Het team: Annemieke Ingelaat, Louk Gilissen, Ernic Kamerich

hoofdstuk 1 De gehele getallen Op rekenmachines en computers is rekenen met gehele getallen een prettige taak, zolang er geen overflow optreedt, prettiger dan met floats : afrondfouten kunnen niet optreden. In veel toepassingen van computers wordt intensief gebruik gemaakt van dit rekenen met gehele getallen: digitale coderingen van geluid en beeld, codering van signalen i.h.a., maar ook versleuteling van berichten bijvoorbeeld. Dit en het volgende hoofdstuk gaan over rekentechnieken die daar een rol bij spelen. Tevens komen hier allerlei ideeën te voorschijn die in latere hoofdstukken opnieuw een rol spelen. 1.1 Delen met rest Zoals je weet, zijn de natuurlijke getallen: 0, 1, 2, 3, 4, 5,.... De verzameling van de natuurlijke getallen duiden we aan met het symbool N. Met N bedoelen we dan de verzameling van de natuurlijke getallen ongelijk aan 0. De verzameling van de gehele getallen..., 4, 3, 2, 1, 0, 1, 2, 3,.... wordt aangeduid met Z. In het algemeen kun je wiskundig een natuurlijk getal niet door een ander natuurlijk getal delen binnen de natuurlijke getallen: jij kunt natuurlijk wel delen, maar dat zal i.h.a. geen natuurlijk getal opleveren, dus een object van een ander type. In de context van natuurlijke getallen en gehele getallen past wel delen met rest, bijvoorbeeld 30 : 7 = 4, rest 2. In computerprocessors zijn normaal basisvoorzieningen aanwezig om gehele getallen te representeren (zie paragraaf 3.1 op bldz. 62) en daarmee op te tellen, af te trekken en te vermenigvuldigen. En natuurlijk is er een test op positief, negatief of 0 zijn. Daarmee is dan ook weer delen met rest te maken, zoals je dadelijk zult zien. In C + + is delen beschikbaar door de operator /, maar een elementaire rekenprocessor hoeft niet over delen met rest te beschikken. We gaan nu er van uit dat de bewerkingen optellen, aftrekken en vermenigvuldigen in de gehele getallen beschikbaar zijn. Verder is er een test of een getal positief, negatief of 0 is. Samen met aftrekken levert dat natuurlijk een test of een getal groter is dan een ander getal. Hoe kun je delen met alleen optellen, aftrekken en vermenigvuldigen en een test op groter-dan ter beschikking? 30 door 7 delen-met rest kan worden uitgevoerd door zo veel keren 7 van de 30 af als kan, d.w.z. het maximum aantal keren om geen negatief resultaat te krijgen. Dat aantal keren noem je het quotiënt; wat je overhoudt noem je de rest. We gaan dat algoritme even wat preciezer opschrijven:

2 1. De gehele getallen (1.1) algoritme voor delen: paar natuurlijke getallen DeelMetRest (natuurlijk getal a, pos nat getal b) \* specificatie invoer: natuurlijke getallen a en b met b 0*\ \* specificatie uitvoer: natuurlijke getallen q en r zodat a = qb + r en r < b *\ { } integer r = a; integer q = 0 while (r b) { r=r-b; q=q+1 } return ( q, r ) Natuurlijk is bovenstaande niet syntactisch correct in C + + ; een complete uitwerking in C + + verderop. staat iets? vraag: a. Als het algoritme termineert, voldoet het resultaat van dit algoritme dan aan de specificatie van de uitvoer? b. Termineert het algoritme? antwoord: a. We moeten eerst nagaan of a = qb + r aan het eind van het proces. Dat doen we door te beredeneren dat dat telkens na elke herhalingsstap geldt. Voor het gemak schrijven we de formule om naar: r = a q b Dat zie je met inductie: - Het klopt in het begin: r = a 0 b. - Als r = a q b en er worden nieuwe waarden voor r en q gemaakt, die we hier maar even aanduiden met r en q, dan r = r b dus q = q + 1 r = a q b b = a (q + 1) b = a q b Dus aan het eind geldt ook dat r = a q b oftewel a = r + q b.

1.1 Delen met rest 3 Nu moeten we nog nagaan dat 0 r < b. Daartoe moeten we kijken naar de conditie van het termineren. Het algoritme stopt precies wanneer r een waarde kleiner dan b krijgt, dus r < b. We moeten alleen nog zien dat 0 r. Maar als r < 0, dan zou in de vorige stap r een waarde hebben gehad gelijk aan de huidige waarde van r plus b, dus een negatief getal plus b, dus zou toen al r een waarde kleiner dan b hebben gehad en zou het algoritme toe al gestopt zijn. Dat kan dus niet. b. In iedere stap daalt de waarde van r met een vaste waarde (b > 0). Dus r komt vanzelf ooit onder de gegeven stopwaarde. Het algoritme berekent dus uit natuurlijke getallen a en b met b 0 inderdaad twee natuurlijke getallen q en r volgens de specificatie: a = q b + r 0 r < b We zien dat het algoritme in bovenstaande correct is, maar een goed algoritme? Nou, het schiet niet echt op. Zie opgave 3.2 op bldz. 64! het bewijzen van correctheid van een wiskundig algoritme Een wiskundig algoritme beschrijven en de correctheid ervan bewijzen kan als volgt worden uitgevoerd: a. Na wat intuïtief nadenken over hoe je in de praktijk iets uitrekent, beschrijf je het algoritme, bijvoorbeeld als C + + programma. Let daarbij vooral op een goede leesbaarheid: kies duidelijke namen en gebruik zo nodig abstractie d.m.v. datastructuren en procedures voor complexe berekeningen. b. Het is altijd verstandig even een paar concrete voorbeelden te testen; dat kan door het programma echt in te voeren en te testen, maar vaak is het handiger in zo n eenvoudig geval handmatig de stappen van het algoritme door te rekenen. Mocht er iets mis zijn, dan zie je de fout doorgaans sneller als je zelf rekent. c. Van iedere procedure moeten duidelijk vastgelegd zijn: de invoercondities (zo nodig m.b.v. test op condities in het begin van de procedure) de specificatie van de uitvoer. Je moet nu precies beredeneren, dat de procedure bij invoer volgens de gegeven condities iets oplevert dat aan de uitvoerspecificatie voldoet. d. Bij een redenering over het resultaat van een herhalingsstructuur is het doorgaans handig een inductieredenering te gebruiken, wellicht over iets dat constant blijft. e. Bij een herhalingsstructuur moet altijd beredeneerd worden dat deze termineert.

4 1. De gehele getallen We hebben nu een algoritme dat getallen berekent volgens de specificatie. Het algoritme doet altijd precies hetzelfde; het zal op een andere computer op een ander tijdstip hetzelfde resultaat leveren indien de invoer gelijk blijft. Het resultaat ligt vast. Maar zou je misschien wel een ander algoritme kunnen bedenken dat ook getallen berekent volgens de bovenstaande specificatie, maar met andere resultaten? Of maakt die specificatie het onmogelijk een ander stel getallen te vinden?? vraag: Liggen die getallen q en r door de specificatie van de uitvoer vast? antwoord: We gaan dat als volgt aanpakken: Stel maar eens dat q, r en q, r voldoen aan de specificatie. We gaan kijken naar de verschillen q q, r r en willen bewijzen dat die 0 zijn. Stel dus maar eens dat er naast q en r ook nog (andere?) getallen q en r zijn zodat Dan dus a = q b + r en 0 r < b q b + r = q b + r We willen laten zien dat q = q en r = r. Het is daarom handig naar de verschillen te gaan kijken, in de hoop dat we kunnen zien dat die nul zijn. Daarom zetten we bovenstaande formule om in: (q q) b = r r Conclusie: r r is een b-voud. Daarnaast volgt uit de specificatie dat r r niet ver van 0 afzit: zowel r als r hebben een afstand tot 0 minder dan b en beide zitten rechts van 0 (d.w.a. ze zijn minstens 0). Zie je het voor je? Dan zie je ook dat het absolute verschil minder dan b is, preciezer: b < r r < b We kunnen dat ook formeel beredeneren: 0 r < b Trek er r van af om r r te krijgen: r r r < b r (1) Nu gebruiken we dat 0 r < b, dus - Uit 0 r volgt r 0 en dus b r b (2) - Uit r < b volgt b < r We combineren de formules (1), (2) en (3): b < r r r < b r b Nu is er maar één b-voud tussen b en b, namelijk 0. Dus r r = 0 en daarmee ook q q = 0. (3)

1.1 Delen met rest 5 Zo vinden we: Als a en b natuurlijke getallen zijn en b 0, dan is er precies één geheel getal q en één natuurlijk getal r (let op: r 0!) zodat a = q b + r en (0 ) r < b We vinden zo dus bij de natuurlijke getallen a en b precies één stel getallen getallen q en r zodat a = q b + r en 0 r < b Dat was precies de bedoeling. We hadden hier a en b positief verondersteld. Als we dit verhaal willen uitbreiden tot deling met rest van gehele getallen door gehele getallen ongelijk aan 0 moeten we nog even drie extra gevallen bekijken. Dat mag je zelf doen (zie opgave 1.4 op bldz. 9). Het resultaat is: (1.2) stelling: Als a en b gehele getallen zijn en b 0, dan is er precies één geheel getal q en één natuurlijk getal r zodat a = q b + r en 0 r < b Nu we weten dat die getallen q en r vastliggen bij gegeven a en b kunnen we ze ook een naam geven: (1.3) definitie: We zeggen dat q het gehele quotiënt en r de rest is bij (geheeltallige) deling van a door b 0 als a = q b + r en 0 r < b We zullen in het vervolg soms de notatie rest(a, b) gebruiken om de rest aan te duiden en het quotiënt bij deling met rest van a door b met quo(a, b) aanduiden. Ter herinnering: als a en b gehele variabelen zijn in C + +, dan levert a / b het quotiënt en a % b de rest bij a delen door b. (1.4) voorbeeld: rest(12, 4) = 0 en rest(40, 3) = 1 en rest( 40, 3) = 2 Let op: de rest is altijd minstens 0, dus rest( 40, 3) is dus niet 1 (volgens het idee 40 = ( 13) 3 + ( 1)), maar 2, want 40 = ( 14) 3 + 2. einde voorbeeld redeneren over de vraag of iets vastligt Gebruikelijke aanpak: Stel maar eens dat A en B voldoen aan de specificatie. Laat zien dat A en B gelijk zijn, bijvoorbeeld door verschillen te berekenen en uit de specificatie af te leiden dat die verschillen 0 zijn. Of bijvoorbeeld te beredeneren dat quotiënten 1 zijn.

6 1. De gehele getallen Hier is een mogelijke uitwerking van het algoritme in C + + (waarbij de main-procedure is weggelaten): #include <iostream> using namespace std; struct quotient_rest_pos { int quotient; int rest; quotient_rest_pos ( int q, int r ) { quotient = q; rest = r; } } ; quotient_rest_pos DeelMetRestAlgo (int a, int b) /* specificatie invoer: natuurlijke getallen a en b met b!=0 specificatie uitvoer: natuurlijke getallen q en r zodat a=qb+r en r<b */ { int r = a; int q = 0; while ( r >= b ) { r=r-b; q=q+1; } return quotient_rest_pos (q, r); } ; quotient_rest_pos DeelMetRest (int a, int b) /* specificatie invoer: natuurlijke getallen a en b met b!=0 specificatie uitvoer: natuurlijke getallen q en r zodat a=qb+r en r<b */ { if ( b==0 ) { cout << "delen door 0 niet mogelijk"; exit (1); } if (a<0 b<0) { cout << ïnvoer: negatieve invoer nog niet geimplementeerd"; exit (1); } return DeelMetRestAlgo (a,b); } ;

1.1 Delen met rest 7 Als je op papier gaat delen met rest, doe je dat normaal met een staartdeling. Die is veel is efficiënter dan het bovenstaande algoritme. Laten we nog even kijken hoe dat werkt. Hier is een voorbeeld: 13 / 209191 \ 16091 13 -- 79 78 -- 11 0 -- 119 117 --- 21 13 -- 8 Dus 209191 = 16091 13 + 8. Eigenlijk is dit een verkorte schrijfwijze. Het begint met: 13 / 209191 \ 10000 130000 ------ 79191 Dat wil zeggen: 209191 = 10000 13 + 79191 en met die rest 79191 wordt nu verder gerekend. In niet-verkorte vorm zou je zo krijgen: 13 / 209191 \ 10000 + 6000 + 0 + 90 + 1 130000 ------ 79191 78000 ----- 1191 0 ---- 1191 1170 ---- 21 13 -- 8 Bij iedere stap trek je dus meteen n 10 k keer het deeltal af, waarbij eigenlijk de bedoeling is dat 1 n 9 en k N, zowel n als k zo groot mogelijk zonder dat je na aftrekken een negatief getal overhoudt. Om het overzichtelijk te houden bij het opschrijven laat je na de eerste stap toe dat eventueel n = 0, om te zorgen dat je bij iedere stap k precies 1 lager neemt, maar dat is niet wezenlijk voor het feitelijke proces.

8 1. De gehele getallen Dit is natuurlijk speciaal handig voor decimale notatie van getallen. Als je binair rekent, gaat het net een beetje anders, in feite zelfs simpeler. We zullen dat nader bekijken in het hoofdstuk over binaire codering van getallen. Zie opgave 3.2 op bldz. 64. Opgaven opgave 1.1 oefening Bereken: a. quo(50, 13) en rest(50, 13) b. quo( 50, 13) en rest( 50, 13) c. quo(50, 13) en rest(50, 13) d. quo( 50, 13) en rest( 50, 13) opgave 1.2 oefening Zijn de volgende beweringen waar of niet waar? Als a, b, c en n natuurlijke getallen ongelijk aan 0 zijn, dan a. rest(a + b, c) = rest(a, c) + rest(b, c) b. rest(n a, c) = n rest(a, c) Voor het geval een bewering waar is, bewijs deze; anders: geef een tegenvoorbeeld en corrigeer de formule rechts van het =teken zodat je wel een correcte formule krijgt. Advies 1: Ga de formules systematisch testen door bijvoorbeeld eerste eens a, b en c vast te nemen en n een aaneensluitende serie natuurlijke getallen te laten doorlopen. Advies 2: Om correctheid van een formule te bewijzen moet je gebruik maken van definities en stellingen uit de theorie; hier kun je goed gebruik maken van de formule uit de definitie van rest : a = q b + rest(a, b) met 0 rest(a, b) < b opgave 1.3 uitdager In deze opgave kun je veelvuldig gebruik maken van de resultaten van opgave 1.2. Bijvoorbeeld: rest(5783, 7) = rest(5 10 3 + 7 10 2 + 8 10 1 + 3, 7) Maak nu gebruik van rest(10 0, 7) =..., rest(10 1, 7) =..., rest(10 2, 7) =..., rest(10 3, 7) =...,... a. Leg uit hoe je zonder delen uit de (tientallige) cijfernotatie van een getal snel de rest bij delen door 2 kunt berekenen. Leg uit waarom je algoritme klopt. b. Idem voor delen door 4. c. Idem voor delen door 8. d. Idem voor delen door 9. (Voor het geval je het niet weet: kijk naar de som van de cijfers! Bereken ook rest(1000000, 9), rest(40000, 9), rest(1040000, 9) en rest(1250400, 9).) Test je algoritme met een paar niet al te kleine getallen. Advies: als je gaat beredeneren, waarom je algoritme klopt, kijk dan eens bijvoorbeeld naar rest(1457, 9) en bedenk dat 1457 = 1000 + 400 + 50 + 7.

1.1 Delen met rest 9 e. Idem voor delen door 3. f. Idem voor delen door 11. Advies: bereken eerst rest(10, 11), rest(100, 11), rest(1000, 11), rest(10000, 11) en rest(100000, 11). opgave 1.4 oefening Beschrijf een functie DeelMetRestInt voor deling met rest in de gehele getallen door een bestaand algoritme deel rest pos voor deling met rest van een positief geheel getal door een positief geheel getal aan te roepen. Je kunt desgewenst daarvoor het eerder beschreven algoritme nemen, maar dat is wel zeer inefficient. Later zul je zien hoe dat veel sneller kan. Denk er aan dat je als rest een zo klein mogelijk natuurlijk getal wilt hebben, dus niet een negatief getal. Schrijf je algoritme in C + + of in een denkbeeldige taal. Bewijs de correctheid van jouw algoritme. 1.2 Veelvouden en delers We gaan nu speciaal kijken naar het geval dat rest(a, b) = 0, dus het geval dat er een getal q is zodat a = q b, dus dat a een b-voud is. In zo n geval zeggen we ook dat b een deler is van a. (1.5) voorbeeld: De delers van 18 zijn: 1, 1, 2, 2, 3, 3, 6, 6, 9, 9, 18, 18 Let er op dat ook 18 zelf een deler is van 18 en dat 18 hier een veelvoud van zichzelf wordt genoemd, een beetje vreemd misschien, maar in de praktijk wel handig. Omdat 1, 1, 18 en 18 nogal flauwe delers van 18 zijn, worden de overige delers wel de echte delers van 18 genoemd. einde voorbeeld Voor een test op een computer of een geheel getal d ( 0) deler is van een geheel getal n zul je normaal nagaan of de rest bij geheeltallig delen 0 is. Voor wiskundig redeneren is echter meestal handiger te zeggen dat d een deler is van n als n veelvoud van d is, dus als er een geheel getal q bestaat zodat n q d. (1.6) definitie: Laat n en d gehele getallen zijn ongelijk aan 0. We zeggen dat d een deler (Engels: divisor) is van n, of dat n een veelvoud (Engels: multiple) van d is als er een geheel getal q is zo dat q d = n. Als d een deler van n is zeggen we ook wel d deelt n, en ook zeggen we wel dat n een d-voud is. het begrip deler versus de operatie delen We zeggen niet 4 is een deler van 12 want 12/4 is een geheel getal want echt delen hoort niet thuis bij de gehele getallen: daarvoor heb je een ander type objecten nodig: de rationale getallen.

10 1. De gehele getallen We kunnen wel zeggen: 4 is een deler van 12 want rest(12, 4) = 0 want dat is niets anders dan een variatie op de officiële definitie van het begrip deler op basis van de definitie van delen met rest, en dat laatste is wel een deel van het systeem van de gehele getallen. (1.7) notatie: Als d een deler is van n en niet d = n = 0 noteren we dat met d n. Om aan te geven dat d geen deler is van n (waarbij niet d = n = 0) schrijven we d n. Door op te schrijven d n geven we impliciet aan dat niet d = n = 0. Verder zullen we in zo n geval het quotiënt van n bij deling door d noteren als n d. Let op: we hebben in dit kader geen breuken ter beschikking: omdat d n, is er precies één geheel getal dat bij vermenigvuldigen met d het getal n oplevert, en dat gehele getal duiden we nu dus aan met n d. We gaan het hier niet bewijzen, maar rekenen met deze notatie gaat net zo als je van breuken gewend bent, dus bijvoorbeeld m n d = mn d Let op: n d is hier echt iets anders dan wat je in C+ + aanduidt met n/d. Maak ook duidelijk onderscheid tussen de schuine streep en de boven ingevoerde verticale streep voor deler van. (1.8) voorbeeld: einde voorbeeld 4 12 want 4 3 = 12 3 15 want 3 ( 5) = 15 2 6 want ( 2) ( 3) = 6 3 5 want 1 3 < 5 en 2 3 > 5, dus 5 is geen 3-voud. 1.3 Eigenschappen van de relatie deler De relatie is deler van is een z.g. orderelatie, net als is kleiner dan. De bekende eigenschap Als a b en b c dan a c. kun je vertalen naar: Voor alle gehele getallen a, b en c ongelijk aan 0: Als a b en b c dan a c. bewijs: Om bovenstaande te bewijzen gebruiken we uiteraard de definitie van deler : a b betekent dat er een getal p is zodat b = p a

1.3 Eigenschappen van de relatie deler 11 b c betekent dat er een getal q is zodat c = q b Dus c = q p a Aangezien q p het product van twee gehele getallen, dus geheel is, lezen we af dat c een a-voud is, dus dat a c. Zo zijn er meer gelijkenissen. Bijvoorbeeld: Als a b en n > 0 dan n a n b Dat kunnen we hier nog wat royaler vertalen: voor alle gehele getallen a, b en c ongelijk aan 0: Als a b dan n a n b Verbanden met optellen en vermenigvuldigen zijn er nog veel meer; een belangrijke daarvan is, dat de som van twee a-vouden ook een a-voud is. In formule: Als a b en a c dan a b + c Sterker nog: voor alle gehele getallen a, b, c, n en m ongelijk aan 0: Als a b en a c dan a n b + m c voor a, b, c, m en n gehele getallen. Deze en de vorige eigenschap kun je in de volgende opgaven zelf bewijzen. Samenvatting: (1.9) stelling: Voor alle gehele getallen a, b, c, n, m ongelijk aan 0: a. Als a b en b c dan a c b. Als a b dan n a n b c. Als a b en a c dan a n b + m c Opgave opgave 1.5 oefening Kijk nog eens goed hoe van stelling (1.9) onderdeel a bewezen is en bewijs dan onderdeel c. Doe dat door gebruik te maken van de definitie; bijvoorbeeld is er gegeven dat a b, dus dat er een geheel getal p bestaat zodat b = pa. Bewijzen dat a n b + m c betekent: zoek een geheel getal t zodat n b + m c = ta.

12 1. De gehele getallen 1.4 Redeneren met getallen Wiskundige beweringen (uiteraard ondubbelzinnig en nauwkeurig geformuleerd) bewijs je door strikt te redeneren op basis van definities en stellingen. Hier boven gebeurt er in het bewijs niet veel meer dan dat het begrip deler vertaald wordt m.b.v. de definitie. Je gaat telkens uit van wat gegeven is en redeneert dan door naar dat wat je bewijzen moet. Gebruik nooit wat je bewijzen moet, ook al levert dat iets op dat waar is: daarmee zet je de boel logisch op zijn kop! Hier is een voorbeeld hoe je met redeneren de mist in kunt gaan. Als a deler is van bc dan is a deler van b. Zogenaamd bewijs: a is deler van bc betekent: bc = na. a is deler van b betekent: b = ma, dus bc = mac. Dat klopt als je n = mc neemt. Bovenstaande is onzin! De bewering is natuurlijk ook niet waar. Waar gaat het mis? De bewering is van type als P dan Q en in dat zogenaamde bewijs worden die beide uitspraken gewoon gelijk behandeld. We hadden zo moeten beginnen: Laat gegeven zijn dat a deler is van bc, dus dat een geheel getal n bestaat zodat b = na. We willen bewijzen dat dan a deler is van b, dus dat er een geheel getal m bestaat zodat b = ma. Kortom: gegeven is bc = na met a, b, c, n Z. We we zoeken een geheel getal m zodat b = ma. We nemen nu m = n c... Ja, hier zie je meteen dat deze poging tot bewijs mis gaat: n c hoeft niet te bestaan (in onze wereld van uitsluitend gehele getallen). Dat een poging tot bewijs mis gaat betekent natuurlijk nog niet dat de bewering onwaar is. Daar heb je een tegenvoobeeld voor nodig, maar dat kun je hier zelf gemakkelijk verzinnen. Moraal: Gebruik nooit wat je wilt bewijzen! Als je probeert een bewering te bewijzen waarin zo iets staat als a b, dan kun je dat vertalen in voor alle p Z geldt p a b. Dat leidt tot lastige redeneringen, waar je gemakkelijk fouten kunt maken. (1.10) voorbeeld: Hier komt een kronkel! We gaan bewijzen: als a b en c d, dan ab cd. Stel a b, dus Stel c d, dus voor alle p Z : voor alle q Z : Vermenigvuldigen levert: voor alle p, q Z : ap b cq d ac pq bd

1.4 Redeneren met getallen 13 Omdat ieder geheel getal k te schrijven is als een product van twee gehele getallen (je kunt één daarvan 1 nemen!) geldt dus voor alle k Z : ac k bd Dus ac bd. De bewering die we hier probeerden te bewijzen is fout! Verzin zelf maar een tegenvoorbeeld. Waar zit de fout? Het redeneren met is een gevaarlijke bezigheid: 6 8 en 20 15, maar 6 20 = 8 15. einde voorbeeld (1.11) advies: Als je een bewering wilt bewijzen waarin iets staat als ër is geen... öf voor alle... geldt......, gebruik dan zo mogelijk een bewijs uit het ongerijmde. (1.12) voorbeeld: Hier is nog een fout bewijs. In dit voorbeeld gaat het om ontkenningen ( is niet gelijk aan ) en dat suggereert dus volgens het voorgaande advies een bewijs uit het ongerijmde. Bewering: als a b dan ac bc. Zogenaamd bewijs: uit het ongerijmde! Als a = b, dan a b = 0. Dus (a b) c = 0 c = 0, dus ac bc = 0, dus ac = bc, maar dat is niet waar. Klaar! Weer onzin! Deze keer hebben we een foute versie van bewijs uit het ongerijmde gebruikt. De bewering is van type als P dan Q en een bewijs uit het ongerijmde zou dan zó werken: Stel dat P waar is en Q niet waar is... dus P is niet waar. Strijdig. In dit geval: we zouden veronderstellen dat ac = bc en daaruit moeten kunnen concluderen dat a = b. Maar dat kunnen we niet, want we kunnen niet zomaar die c wegstrepen, immers, c zou wel eens nul kunnen zijn! einde voorbeeld Opgaven opgave 1.6 uitdager, inleveren Onderzoek van elk van de volgende beweringen of deze waar is voor alle gehele waarden ongelijk aan 0 van de variabelen. Zo ja, bewijs dat (m.b.v. de definitie van deler ), zo nee geef een tegenvoorbeeld. Telkens zijn a, b, c, d gehele getallen ongelijk aan 0. a. a c en b c = a + b c b. a c en b d = a b c d

14 1. De gehele getallen opgave 1.7 uitdager, inleveren Onderzoek van elk van de volgende beweringen of deze waar is voor alle gehele waarden ongelijk aan 0 van de variabelen. Zo ja, bewijs dat (m.b.v. de definitie van deler ), zo nee geef een tegenvoorbeeld. Telkens zijn a, b, c, d gehele getallen ongelijk aan 0. a. a c en b c = a b c b. a b en b c = a c c. a b + c en b c = a c d. a b en b c = a c e. a c en b c = ab c f. c a en c b = c ab opgave 1.8 uitdager Hier zijn twee foute bewijzen voor de bewering c aenc b = c ab a. Uit c a volgt pc a voor alle p Z. Uit c b volgt qc b voor alle q Z. Dus pqc ab voor alle p, q Z, dus rc ab voor alle r Z. Dus c bc. Wat is er fout in dit bewijs? b. Uit c/nmida volgt a = pc + r met p Z en 0 r < c. Uit c/nmidb volgt b = qc + s met q Z en 0 s < c. Dus ab levert bij delen door c ook een rest ongelijk aan 0. Wat is er fout in dit bewijs? opgave 1.9 uitdager, extra oefening Onderzoek van elk van de volgende beweringen of deze waar is voor alle gehele waarden ongelijk aan 0 van de variabelen. Zo ja, bewijs dat (m.b.v. de definitie van deler ), zo nee geef een tegenvoorbeeld. Telkens zijn a, b, c, d gehele getallen ongelijk aan 0. a. a c en b c = ab c 2 b. a c en b c = ab c 2 c. a c en ab c 2 = b c d. a c en a 2 bc = a 2 c e. a c en a 2 bc = a b

1.4 Redeneren met getallen 15 1.5 Priemgetallen De priemgetallen zijn de natuurlijke getallen die geen delers hebben behalve 1 en zichzelf, met één uitzondering: we noemen 1 geen priemgetal. (1.13) definitie: Een natuurlijk getal p heet een priemgetal (Engels: prime number) als 1 en p de enige natuurlijke getallen zijn die p delen en p 1. De eerste priemgetallen zijn 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,.... Zo kun je natuurlijk nog wel een tijdje doorgaan! Maar kijk nu eens naar heel grote getallen. Dan zijn er wel erg veel getallen die kleiner zijn, dus lijkt de kans groot dat daar wel ergens een deler bij is. Houdt die rij priemgetallen ergens op? Dat is een vraag die al in de oudheid beantwoord is:? vraag: Zijn er eindig of oneindig veel priemgetallen? antwoord: We gaan bewijzen dat er oneindig veel priemgetallen bestaan. Dat gaan we doen door te veronderstellen dat het er maar eindig veel zijn en daaruit een tegenspraak af te leiden: een bewijs uit het ongerijmde. bewijs: Stel dat er maar eindig veel priemgetallen zijn, zeg p 1, p 2,..., p m. Bekijk het natuurlijke getal n := 1 + p 1 p 2 p m. Dat is dan dus geen priemgetal. De kleinste deler van n is natuurlijk 1, neem nu de op één na kleinste deler van n. Dat is dan zeker een priemgetal, want als dat getal nog een echte deler zou hebben, dan zou dat een kleinere deler van n zijn. Dus n is deelbaar door een priemgetal. Als we de priemgetallen even zo nummeren, dat n juist te delen is door p 1, dan krijgen we: Conclusie: p 1 1 + p 1 p 2 p 3 p m Er is dus een geheel getal q met q p 1 = 1 + p 1 p 2 p 3 p m (q p 2 p 3 p m )p 1 = 1 Dat kan niet: 1 is niet een veelvoud van een geheel getal p 1 dat groter is dan 1. De veronderstelling dat er maar eindig veel priemgetallen zouden zijn leidt dus tot een tegenspraak. (1.14) stelling: Er zijn oneindig veel priemgetallen. Priemgetallen spelen een belangrijke rol in sommige coderingtechnieken.

16 1. De gehele getallen Opgaven opgave 1.10 oefening Ga na of de volgende getallen priem zijn. a. 301 b. 569 c. 1001 opgave 1.11 programmeer Verzin een algoritme om na te gaan of een getal priem is of om een echte deler ervan op te sporen. (Het zoeken van snelle en efficiënte algoritmen voor dit doel staat sterk in de belangstelling i.v.m. het kraken van sleutels voor coderingen.) Programmeer dit in C + +, test je programma en beredeneer tenslotte dat het correct is. Voor grote getallen is het prettig als het programma efficiënt werkt, dus zo weinig mogelijk hoeft te rekenen. Hoeveel vermenigvuldigingen en hoeveel delingen heeft jouw algoritme nodig om te testen of 13789 priem is? (Je kunt dat door uitbreiden van het programma zelf testen!) 1.6 De grootste gemene deler Als je de vergelijking in x R 80x 2 32x + 56 = 0 wilt oplossen, dan zul je doorgaans eerst even alle coëfficiënten door 8 gaan delen. In veel gevallen is het nuttig om gemeenschappelijke delers van een stel gehele getallen te vinden, omdat het alleen maar gaat om de verhouding en je dan kunt vereenvoudigen als je alle getallen door zo n gemeenschappelijke deler deelt. Het beste kun je dan delen door de grootste gemeenschappelijke deler. Als je twee gehele getallen a en b neemt, dan hebben ze zeker gemeenschappelijke delers, dank zij het feit dat we die flauwe delers 1 en 1 ook als delers hebben geaccepteerd. Als a = b = 0, dan zijn alle gehele getallen gemeenschappelijke delers, maar als minstens één van beide getallen niet 0 is, dan zijn er maar eindig veel gemeenschappelijke delers en is er dus ook een grootste. We kunnen dus definiëren: (1.15) definitie: Laat a en b gehele getallen zijn. We zeggen dat d Z een gemene deler (Engels: common divisor) is van a en b als d a en d b. Als a 0 of b 0 zijn er slechts eindig veel gemene delers van a en b. Dus is er een grootste. We noemen die de grootste gemene deler (Engels: greatest common divisor, gcd) van a en b en noteren hem als ggd(a, b). (1.16) voorbeeld: De delers van 24 zijn: ±1, ±2, ±3, ±4, ±6, ±8, ±12, ±24. De delers van 18 zijn: ±1, ±3, ±6, ±9, ±18. De gemene delers van 24 en 18 zijn: ±1, ±2, ±3, ±6. De grootste gemene deler van 24 en 18 is dus 6. einde voorbeeld

1.4 Redeneren met getallen 17 Het is duidelijk dat ggd(a, b) een natuurlijk getal 1 is en dat ggd(a, b) = ggd ( a, b ). We hebben in bovenstaande definitie alleen gekeken naar de gemene delers en de grootste gemene deler van twee gehele getallen (die niet beide 0 zijn); het ligt voor de hand hoe je dat voor een langer rijtje getallen zou moeten doen. Het berekenen van de grootste gemene deler is een basistechniek om met breuken (rationale getallen) te kunnen rekenen t.b.v. het vereenvoudigen. Voor het invoeren van een type rational in software is deze operatie dus onmisbaar. 1.7 Het algoritme van Euclides In principe kun je de grootste gemene deler van twee getallen a en b nu uitrekenen door eerst alle delers van a en die van b te bepalen en vervolgens de grootste van de gemene delers te nemen. Maar deze methode verloopt zeer moeizaam omdat het vinden van de delers van een getal een tijdrovende zaak kan zijn. Er is echter een snelle methode om ggd(a, b) te bepalen, één van de oudste algoritmen: het algoritme van Euclides. Dat is gebaseerd op het volgende idee: veronderstel dat a > b, dan ggd(a, b) = ggd(a b, b) en hiermee hebben we het probleem gereduceerd, want we hebben nu een paar getallen gekregen dat kleiner is dan het voorgaande. Laten we de bovenstaande bewering eerst even bewijzen: (1.17) lemma: Laat a en b gehele getallen zijn, niet beide 0. Dan ggd(a, b) = ggd(a b, b). bewijs: We gaan bewijzen dat iedere gemene deler van a en b ook gemene deler van a b en b is, en eveneens dat iedere gemene deler van a b en b ook gemene deler van a en b is. Daarmee krijgen we natuurlijk ook dat de grootsten van beiden gelijk zijn. Gevolg Daarmee zien we: - Stel dat q a en q b. Dan zijn er gehele getallen u en v zodat a = u q en b = v q. Dus a b = uq vq = (u v)q, dus q a b; we wisten al dat q b, dus q is gemene deler van a b en b. - Stel dat q a b en q b. Dan zijn er gehele getallen u en v zodat a b = u q en b = v q. Dus a = a b + b = uq + vq = (u + v)q, dus q a; we wisten al dat q b, dus q is gemene deler van a en b. ggd(a, b) = ggd(a b, b) = ggd((a b) b, b) = ggd(((a b) b) b, b) =...

18 1. De gehele getallen (1.18) lemma: Laat a en b gehele getallen zijn, beide niet 0. Dan ggd(a, b) = ggd(rest(a, b), b) Zo kunnen we gemakkelijk de grootste gemene deler bepalen: ggd(3000, 777) = ggd(3000 3 777, 777) = ggd(669, 777) = ggd(777, 669) = ggd(777 1 669, 669) = ggd(108, 669) = ggd(669, 108) = ggd(669 6 108) = ggd(21, 108) = ggd(108, 21) = ggd(108 5 21) = ggd(3, 21) = ggd(21, 3) = ggd(21 7 3, 3) = ggd(0, 3) = ggd(3, 0) = 3 Een handige manier van opschrijven van de berekening is als volgt, met een aaneenschakeling van staartdelingen tot je rest 0 krijgt. 777 / 3000 \ 3 2331 ---- 669 / 777 \ 1 669 --- 108 / 669 \ 6 648 --- 21 / 108 \ 5 105 --- 3 / 21 \ 7 21 -- 0 Let wel even goed op, hoe en waar je nu de grootste gemene deler afleest! Het algoritme van Euclides kun je formeel zo opschrijven: Laat a en b gehele getallen zijn, beide 0 en niet tegelijk beide 0. Dan ggd(a,b) = als b=0 dan a anders als a<b dan ggd(b,a) anders ggd(a-b,b) Die laatste stap is niet efficient, je kunt beter zo vaak mogelijk het tweede argument (b) aftrekken van het eerste argument zo lang je iets 0 overhoudt, dus kun je dit wijzigen in: ggd(a,b) = als b=0 dan a anders als a<b dan ggd(b,a) anders ggd( rest(a,b), b )

1.4 Redeneren met getallen 19 maar omdat rest(a, b) < b zou je dan bij de volgende stap de argumenten gaan verwisselen (derde regel van de beschrijving), dus is het nog handiger hiervan te maken: ggd(a,b) = als b=0 dan a anders als a b dan ggd(b,a) anders ggd( b, rest(a,b) ) Dat algoritme kun je bijvoorbeeld als volgt schrijven in C + + : (1.19) algoritme van Euclides: #include <iostream> using namespace std; int EuclidesAlgo(int a, int b) /* invoer specificatie: twee natuurlijke getallen, niet beide nul uitvoer specificatie: de grootste gemene deler van a en b */ { if ( b==0 ) return a; else return EuclidesAlgo(b, (a % b)); } ; int Ggd (int a, int b) /* invoer specificatie: twee gehele getallen, niet beide nul uitvoer specificatie: de grootste gemene deler van a en b */ { if ( a==0 && b==0 ) { cout << "ggd(0,0) bestaat niet" << endl ; exit (1); } return EuclidesAlgo( abs(a), abs(b) ); } ; We moeten nu nog nagaan of het algoritme doet wat het belooft in de specificatie. Maar dat volgt direct uit lemma (1.18) en het feit dat ggd(a, 0) = a als a > 0.

20 1. De gehele getallen 1.8 Een belangrijke eigenschap van de grootste gemene deler Als je nog eens naar het rekenvoorbeeld ggd(3000, 777) = 3 kijkt, dan zie je dat je vanuit 3 ook terug kunt rekenen: Resultaat: 3 = 108 5 21 = 108 5 (669 6 108) = = 31 108 5 669 = 31 (777 669) 5 669 = = 31 777 36 669 = 31 777 36 (3000 3 777) = = 139 777 36 3000 3 = 36 3000 + 139 777 We zeggen wel, dat 3 een gehele combinatie is van 3000 en 777. Aan het algoritme van Euclides kun je zien dat algemeen geldt: Laat a en b gehele getallen zijn met a en b niet beide 0. Dan zijn er gehele getallen p en q zo dat ggd(a, b) = pa + qb? vraag: Zijn die getallen p en q uniek of zijn er meer mogelijkheden? antwoord: Voorbeeld: ggd(48, 30) = 6 = 2 48 3 30 maar ook bijvoorbeeld ggd(48, 30) = 6 = 2 48 + 240 3 30 240 = 7 48 11 30 Verderop in dit hoofdstuk zul je zien hoe je ze allemaal kunt vinden. Opgave opgave 1.12 oefening a. Bereken handmatig ggd(5605, 12508) b. Bereken getallen p en q zodat ggd(5605, 12508) = 5605p + 12508q c. Bereken handmatig ggd(225134, 83798). d. Bereken getallen p en q zodat ggd(225134, 83798) = 225134p + 83798q

1.4 Redeneren met getallen 21 1.9 Gehele combinaties We weten nu dat de grootste gemene deler van a en b een gehele combinatie van a en b is. Laten we nu eens de verzameling V van alle gehele combinaties van a en b onderzoeken: V := { ma + nb m en n geheel } Omdat de grootste gemene deler van a en b een deler is van a en van b, is die ook een deler van ma + nb, dus van elk element van V. Dus elk positief element van V is minstens zo groot als die grootste gemene deler. Maar, zoals we zojuist gezien hebben, de grootste gemene deler is zelf een element van V. Dus is de grootste gemene deler het kleinste positieve element van V. Daarmee komen we tot het (1.20) vermoeden: Laat d de grootste gemene deler van de gehele getallen a en b zijn. De verzameling van alle gehele combinaties van a en b is gelijk aan de verzameling veelvouden van d. In formule: { ma + nb m Z en n Z } = { kd k Z } bewijs: - Neem een gehele combinatie van a en b, zeg ma + nb (met m Z en n Z). Per definitie is d een deler van a, dus er is een geheel getal p met a = p d. Zo is er ook een gehele q zodat b = q d. Samen: ma + nb = mpd + nqd = (mp + nq)d dus ma + nb is een veelvoud van d. - Neem een geheel veelvoud van d, zeg k d met k geheel. We weten al dat d een gehele combinatie van a en b is, zeg d = ma + nb met m en n geheel. Dan k d = k (pa + qb) = (kp)a + (kq)b dus kd is een gehele combinatie van a en b.

22 1. De gehele getallen (1.21) stelling: De verzameling van alle gehele combinaties van a en b is gelijk aan de verzameling veelvouden van de grootste gemene deler van a en b: { pa + qb p en q geheel } = { t ggd(a, b) t geheel } Anders gezegd: De kleinste positieve gehele combinatie van twee gehele getallen a en b is juist de grootste gemene deler van a en b. Nog anders gezegd: Er bestaan gehele getallen p en q zodat pa + qb = ggd(a, b). Als n = pa + qb en p en q zijn gehele getallen, dan Opgaven opgave 1.13 oefening Vul de laatste zin van de stelling aan. Vergeet vooral niet je antwoord te controleren met de lijst van antwoorden. opgave 1.14 inleveren Bewijs of weerleg: Als a c en b d dan ggd(a, b) ggd(c, d). opgave 1.15 inleveren Bewijs of weerleg met behulp van de tot hier behandelde definities en stellingen dat ggd(ma, mb) = m ggd(a, b) als m een natuurlijk getal is en m > 0. Waarschuwing: als je dit wilt bewijzen, kijk dan heel kritisch naar iedere stap in je bewijs en geef telkens precies aan welke stelling je gebruikt. opgave 1.16 oefening In de volgende onderdelen zijn de getallen klein genoeg om de antwoorden met een beetje proberen te vinden. Doe dat niet, maar gebruik de methoden die hier boven behandeld zijn. De opgave is bedoeld om je aan de hand van een concreet voorbeeld een algemene rekenmethode voor dit probleem te laten construeren, maar zonder je nodeloos veel rekenwerk te bezorgen. a. Bepaal met behulp van het algoritme van Euclides de grootste gemene deler van 546 en 238. b. Schrijf voor elk van deze tweetallen van gehele getallen hun ggd als gehele combinatie van deze getallen. c. Zijn de antwoorden die je bij het vorige onderdeel gegeven hebt uniek of zijn er meer mogelijkheden? opgave 1.17 oefening Ook deze opgave is bedoeld om je aan de hand van een concreet klein voorbeeld een algemene rekenmethode voor dit probleem te laten construeren. Ga dus niet proberen met wat gokken een antwoord te geven, maar ga echt rekenen met het algoritme van Euclides. a. Bepaal met behulp van het algoritme van Euclides de grootste gemene deler van: 170 en 442 b. Schrijf voor elk van deze tweetallen van gehele getallen hun ggd als gehele combinatie van deze getallen. c. Zijn de antwoorden die je bij het vorige onderdeel gegeven hebt uniek of zijn er meer mogelijkheden?

1.4 Redeneren met getallen 23 opgave 1.18 uitdager, inleveren Bewijs of weerleg in Z voor a, b Z en a, b, a + b, a b allemaal ongelijk aan 0: ggd(a + b, a b) = ggd(a, b) 1.10 * Het uitgebreide algoritme van Euclides Zoals je nu weet kun je de grootste gemene deler van twee gehele getallen a en b (ongelijk aan 0) schrijven als gehele combinatie ggd(a, b) = r a + s b met r en s gehele getallen. Je kunt dergelijke r en s door gewoon terugrekenen in het algoritme van Euclides met de hand bepalen, maar hoe laat je een computer dat doen? Laat d := ggd(a, b). Volgens het algoritme van Euclides krijgen we een rij gehele getallen t 1, t 2, t 3,, t n met t 1 := a, t 2 := b en tenslotte t n = d met t k+1 = rest(t k 1, t k ) waarbij rest(t n 1, t n ) = 0. Om nu terug te rekenen hebben we natuurlijk ook de quotiënten q k nodig: t k 1 = q k t k + t k+1 Bij het terugrekenen gaan we zó te werk: stel dat we al gevonden hebben: d = r k t k + s k t k+1 We gaan nu terugrekenen door in te vullen dat t k+1 = t k 1 q k t k : d = r k t k + s k (t k 1 q k t k ) = s k t k 1 + (r k s k q k )t k We willen dit nu weer schrijven als d = r k 1 t k 1 + s k 1 t k Dus moeten we nemen: r k 1 := s k en s k 1 := r k s k q k Uit het eerste deel zien we dat we de r i s door de s j s kunnen vervangen of omgekeerd. Het eerste blijkt prettig te werken: Als we nu overal de r i s vervangen door s i+1, dan krijgen we: d = s k+1 t k + s k t k+1 en we kunnen de s i s berekenen met de recursieve formule: s k 1 := s k+1 s k q k Tenslotte vinden we d = s 2 t 1 + s 1 t 2 oftewel d = s 2 a + s 1 b Met behulp van bovenstaande is het uitgebreide algoritme van Euclides te maken, dat niet alleen de ggd van

24 1. De gehele getallen twee gehele getallen (ongelijk aan 0) berekent, maar tevens de coëfficiënten van een gehele combinatie van die getallen die de ggd oplevert. Opgave opgave 1.19 programmeer Construeer een algoritme in C + + zoals bedoeld in bovenstaande tekst en test je programma. 1.11 Relatief priem Als van twee gehele getallen de grootste gemene deler 1 is, dan zeggen we dat ze relatief priem zijn: (1.22) definitie: We zeggen dat twee gehele getallen a en b, niet beide 0, relatief priem zijn als ggd(a, b) = 1 Als a en b relatief priem zijn, dan zijn er dus volgens stelling (1.21) op bldz. 22 getallen p en q zodat pa + qb = 1. Anderzijds, voor alle gehele getallen p en q is ggd(a, b) een deler van pa + qb, dus als er gehele getallen p en q bestaan zodat pa + qb = 1, dan is ggd(a, b) een deler van 1, dus ggd(a, b) = 1. Zo zien we: (1.23) stelling: De gehele getallen a en b zijn relatief priem dan en slechts dan als er p, q Z bestaan zo dat pa + qb = 1. Uit twee gehele getallen, beide ongelijk aan 0, kun je twee gehele getallen maken door deze beide getallen te delen door hun ggd. De twee getallen die je zo krijgt zijn relatief priem. Bijvoorbeeld, de getallen 42 en 90 hebben als ggd 6. De getallen 42 6 = 7 en 90 6 = 15 zijn relatief priem. (1.24) stelling: Als a en b gehele getallen zijn en d is hun ggd, dan zijn a en b beide een veelvoud van die d. We krijgen hieruit dus twee nieuwe gehele getallen a d en b. Die zijn relatief priem. d Je mag deze stelling zelf gaan bewijzen. Opgave opgave 1.20 oefenen in wiskundig bewijzen Laat a en b gehele getallen zijn, beide ongelijk aan 0, en d hun grootste gemene deler. Bewijs dat a d en b d relatief priem zijn. 1.12 Delers van een product Als c een deler is van a b, kun je dan concluderen dat c een deler is van a of een deler is van b? Je ziet vast wel zonder echt te gaan rekenen dat 12 een deler is van 15 28. Als 12 een deler is van een product a b, dan kan het best zijn dat 3 een deler is van a en 4 een deler is van b, maar dat 12 geen deler is van a en evenmin van b. Maar als je weet dat ggd(12, a) = 1, dan denk je vast wel dat dan toch 12 een deler is van b. Dat wordt bevestigd door de volgende, vaak toegepaste stelling:

1.12 Delers van een product 25 (1.25) stelling: Laat a, b en d gehele getallen zijn met d a b en a en d relatief priem: ggd(a, d) = 1 dan d b. Opgaven bewijs: We vertalen meteen het gegeven dat a en d relatief priem zijn: er zijn dus gehele getallen s en t met s a + t d = 1 Nu moeten we b nog in beeld brengen en verband leggen met a b, laten we daarom alles maar eens met b vermenigvuldigen: s a b + t d b = b We willen nagaan of d deler is van b, dus van s a b + t d b Omdat d toch al een factor is van de tweede term, is de vraag in feite of d deler is van de eerste term. Dat is zo, want d a b volgens de gegevens. een alternatief bewijs? Misschien zou je denken dat je dit ook kunt bewijzen als volgt: Er zitten geen echte delers van d in die a, maar wel is d een deler van a b, dan zitten dus alle delers van d in die b. Nog afgezien van de nogal vage formulering, is er een probleem: nergens wordt hier gebruik gemaakt van definities of stellingen. Het is wel wiskundige intuïtie, maar geen bewijs. Als je dit idee goed zou willen uitwerken, zou je kunnen denken aan ontbinding van a en b in producten van machten van priemgetallen. De benodigde stellingen kun je in het vervolg van dit hoofdstuk wel vinden, maar om die te bewijzen wordt de bovenstaande stelling als basis gebruikt. Dat idee is ook daarom hier onbruikbaar. opgave 1.21 uitdager Onderzoek van elk van de volgende beweringen of deze waar is voor alle gehele waarden van de variabelen. Zo ja, bewijs dat m.b.v. de definitie van deler en van relatief priem en stelling (1.23) op bldz. 24, zo nee geef een tegenvoorbeeld. In elk van de gevallen zijn a, b en c gehele getallen, maar bovendien is telkens gegeven dat a en b relatief priem zijn. Let op: als je gehele getallen gaat zien als producten van priemgetallen, dan kun je vaak snel zien of iets waar of niet waar is. Maar ontbinding in priemfactoren komt in de volgende paragrafen aan de orde; die mag je nu niet gebruiken. a. a en b zijn relatief priem, a c en b c = a b c b. a en b zijn relatief priem, c a en c b = c ab