Wat is er zo bijzonder aan het getal 105263157894736842? Het getal verdubbelt als je het laatste cijfer helemaal vooraan zet. Bovendien is dit het kleinste natuurlijk getal waarvoor deze eigenschap geldt.
Meer algemeen wordt een positief natuurlijk getal dat kan vermenigvuldigd worden met $$n$$ door het laatste cijfer helemaal vooraan te zetten een $$n$$-parasitisch getal genoemd. Hierbij is $$n$$ zelf een positief natuurlijk getal dat bestaat uit één cijfer. Zo geldt bijvoorbeeld dat \[ 4 \times 128205 = 512820 \] waaruit volgt dat 128205 een 4-parasitisch getal is. Natuurlijke getallen met voorloopnullen zijn niet toegelaten. Dus, ondanks het feit dat geldt dat \[ 4 \times 025641 = 102564 \] is het getal 025641 niet 4-parasitisch.
De kurkentrekkermethode is een techniek die kan gebruikt worden om een $$n$$-parasitisch getal te construeren dat eindigt met een gegeven cijfer $$k$$, waarbij moet gelden dat $$k \geq n$$. Hierbij worden gaandeweg de cijfers van het $$n$$-parasitisch getal bepaald, en dit van rechts naar links. Dit wordt hieronder geïllustreerd voor $$n = 4$$ en $$k = 7$$.
De methode bestaat er dus in om telkens één cijfer meer te nemen op het einde van het resultaat, deze reeks cijfers te laten volgen door het cijfer $$k$$, en het resultaat te vermenigvuldigen met $$n$$. De eerste keer bereken je $$n \times k$$, neem je het laatste cijfer van het resultaat, schrijf je daarachter het cijfer $$k$$ en vermenigvuldig je dit getal met $$n$$. Dan neem je de laatste twee cijfers van dit resultaat, plaats je daarachter het cijfer $$k$$ en vermenigvuldig je dit getal met $$n$$. Deze procedure blijf je herhalen totdat de vermenigvuldiging een resultaat oplevert dat gelijk is aan het getal dat je met $$n$$ hebt vermenigvuldigd, maar dan met het laatste cijfer helemaal vooraan.
De bewerking waarbij het eerste cijfer van een natuurlijk getal helemaal achteraan geplaatst wordt, wordt een rotatie naar links genoemd. De bewerking waarbij het laatste cijfer van een natuurlijk getal helemaal vooraan geplaatst wordt, wordt een rotatie naar rechts genoemd. In beide gevallen worden eventuele voorloopnullen weggelaten. Gevraagd wordt:
Schrijf een functie rotatie_links waaraan een natuurlijk getal moet doorgegeven worden. De functie moet het natuurlijk getal teruggeven dat men bekomt door een rotatie naar links toe te passen op het gegeven getal.
Schrijf een functie rotatie_rechts waaraan een natuurlijk getal moet doorgegeven worden. De functie moet het natuurlijk getal teruggeven dat men bekomt door een rotatie naar rechts toe te passen op het gegeven getal.
Schrijf een functie parasitisch waaraan een natuurlijk getal moet doorgegeven worden. Indien het gegeven getal $$n$$-parasitisch is, dan moet de functie het getal $$n$$ teruggeven. Anders moet het getal 0 teruggegeven worden.
Schrijf een functie kurkentrekker waaraan twee natuurlijke getallen $$n$$ en $$k$$ moeten doorgegeven worden. De functie moet het $$n$$-parasitisch getal dat eindigt op het cijfer $$k$$ teruggeven dat men bekomt na toepassing van de kurkentrekkermethode. De functie mag ervan uitgaan dat $$n$$ en $$k$$ beide positieve natuurlijke getallen van één cijfer zijn, waarvoor geldt dat $$k \geq n$$.
>>> rotatie_links(717948)
179487
>>> rotatie_links(142857)
428571
>>> rotatie_links(105263157894736842)
52631578947368421
>>> rotatie_rechts(179487)
717948
>>> rotatie_rechts(428571)
142857
>>> rotatie_rechts(52631578947368421)
15263157894736842
>>> parasitisch(179487)
4
>>> parasitisch(142857)
5
>>> parasitisch(105263157894736842)
2
>>> parasitisch(1234)
0
>>> kurkentrekker(4, 7)
179487
>>> kurkentrekker(5, 7)
142857
>>> kurkentrekker(2, 2)
105263157894736842
Om makkelijk te kunnen debuggen, geven we hieronder de uitwerking van de kurkentrekkermethode voor de twee andere voorbeelden uit de bovenstaande interactieve sessie.