Getallen ontbinden in priemfactoren
Toen ik op de middelbare school zat, zat er bij het vak wiskunde een onderdeel met de fraaie naam: "Ontbinden in
priemfactoren". Daar snapte ik toen echt helemaal niks van.
Inmiddels snap ik het wel, mede dankzij wiswijzer.nl. Een goede reden om er een artikel aan te wijden.
De site wiswijzer.nl is gesloten.
Bij het ontbinden in priemfactoren zoek je een aantal priemgetallen, zodanig dat het product van die priemgetallen gelijk is
aan het te ontbinden getal.
N.B.: De priemgetallen kunnen meer dan eenmaal voorkomen.
Voorbeeld: We ontbinden het getal 264 in priemfactoren.
- Deel 264 het eerste priemgetal (= 2)
264 / 2 = 132 - Ga daar net zo lang mee door tot je niet meer door 2 kunt delen:
132 / 2 = 66
66 / 2 = 33 - 33 kun je niet meer delen door 2. Dus nemen we het volgende priemgetal (= 3):
33 / 3 = 11 - 11 kun je niet meer delen door 3. Dus nemen we het volgende priemgetal (= 5).
- 11 kun je niet delen door 5. Dus nemen we het volgende priemgetal (= 7).
- 11 kun je niet delen door 7. Dus nemen we het volgende priemgetal (= 11):
11 / 11 = 1
Hiermee is de ontbinding voltooid.
Het resultaat van de berekening: 264 = 2 × 2 × 2 × 3 × 11, = 2³ × 3 × 11
N.B.: Een priemgetal kun je niet ontbinden in priemfactoren. Een priemgetal kun je nl. alleen door zichzelf delen!
Hint: Je kunt probleemloos getallen tot 1 000 000 laten ontbinden in hun priemfactoren. Bedenk wel: Hoe groter het te ontbinden getal, hoe groter de rekentijd.
De code van de applicatie kun je downloaden om zelf aan door te ontwikkelen. Zie onderaan deze bladzijde.
Het script werkt in grote lijnen als volgt:
- Door op de knop met de reknmachine te klikken wordt een nieuw window geopend, zie het item Window openen/sluiten vanuit een ander window.
- In het window wordt het bestand factors.htm getoond.
- In het formulier voer je een getal in. Dat moet een geheel getal zijn dat groter is dan 0.
- Door op de knop Ontbind in factoren te klikken start je de JavaScript function OntbindInPriemfactoren(). Deze function controleert met behulp van de function isInteger() of de invoer bruikbaar is. Zo niet, dan verschijnt er een foutmelding op het scherm en wordt de uitvoering van OntbindInPriemfactoren() gestaakt.
- Als de invoer OK is wordt factorize(x) aangeroepen; x is het getal dat moet worden ontbonden in priemfactoren.
- De function factorize() begint met het maken van een lijst priemgetallen, lopend van 2 tot en met het eerste priemgetal dat groter dan of gelijk is aan x. De lijst wordt opgeslagen in de array primes. De function sieve() die hiervoor wordt gebruikt, werkt op dezelfde manier als beschreven in het item Priemgetallen zeef.
- Vervolgens wordt gekeken of x een priemgetal is. Dat is het geval als x = 2, x = 3 of als x gelijk is aan het laatste element van primes. Als dat zo is verschijnt er een melding op het scherm en wordt de uitvoering van het programma gestaakt. factorize() geeft de waarde 0 terug.
- Er wordt nu begonnen met de ontbinding in factoren, op de manier die hiervoor is beschreven. De achtereenvolgende factoren worden bewaard in de –globale– array factors1. Deze array is dus buiten factorize() om benaderbaar.
- Als het rekenproces klaar is geeft factorize() het aantal factoren terug die in factors1 is opgeslagen.
- Vervolgens wordt de function group(counter1) aangeroepen. counter1 is het aantal elementen in factors1.
Deze function maakt de array factors2 aan op basis van factors1. In factors2 worden de getallenparen
(priemgetal, exponent van het priemgetal) opgeslagen.
Voorbeeld:
- Ontbind 3000 in factoren. 3000 = 2 × 2 × 2 × 3 × 5 × 5 = 2² × 3 × 5³
- factors1 bevat: (2, 2, 2, 3, 5, 5, 5)
- factors2 bevat: (2, 3, 3, 1, 5, 3)
- Net als factors1 is factors2 een globale array, en is dus benaderbaar buiten de function group() om. Merk op dat factors2 alleen gegevens bevat als group() is aangeroepen en dat factors2 altijd een even aantal elementen bevat.
- De informatie in factors2 is bedoeld als hulpmiddel bij het aanmaken van de uitvoer die naar het scherm wodt gestuurd. In je eigen toepassing heb je dat niet per sé nodig.
- Tenslotte wordt het resultaat gepresenteerd op basis van factors1 en factors2 en wordt het invoerveld leeg gemaakt.
N.B. De exponent 1 wordt niet getoond in de uitvoer.
De arrays factors1 en factors2 worden gedefinieerd in de file factors.js. Daar vind je ook de functions
factorize(x), sieve(), group() en isInteger().
De file factors.js hoeft niet te worden veranderd om hem te gebruiken. Maar als je verder wilt ontwikkelen aan dit programma
moet je juist in die file zijn.
Downloaden:
Druk op de knop:
File: voorb328.zip, 5600 bytes.