Probleemstelling
Een palindroomgetal leest van links naar rechts hetzelfde als van rechts naar links. Het grootste palindroom dat het product is van twee tweecijferige getallen is
![]()
Bepaal het grootste palindroom dat geschreven kan worden als het product van twee driecijferige getallen.
Eerste analyse
Er zijn 900 driecijferige getallen. Zelfs wanneer we alle unieke paren onderzoeken, zijn er hoogstens 405450 producten. Deze zoekruimte is klein genoeg voor brute force.
We doorlopen de factoren in dalende volgorde, zodat grote producten eerst worden onderzocht. Zodra verdere producten niet meer groter kunnen zijn dan het beste gevonden palindroom, stoppen we de betreffende lus.
Gekozen programmeeraanpak
De eerste factor daalt van 999 tot 100. De tweede factor daalt telkens van 999 tot de eerste factor, zodat elk ongeordend factorpaar hoogstens eenmaal wordt onderzocht.
Een product is een palindroom wanneer zijn tekstvorm gelijk is aan diezelfde tekst in omgekeerde volgorde. Wanneer dat zo is en het product groter is dan het vorige resultaat, bewaren we het product en beide factoren.
Algoritme
- Initialiseer het grootste palindroom met 0.
- Doorloop de eerste factor dalend van 999 tot en met 100.
- Doorloop de tweede factor dalend van 999 tot en met de eerste factor.
- Bereken het product.
- Breek de lus af wanneer geen groter product meer mogelijk is.
- Vergelijk de tekstvorm van het product met de omgekeerde tekstvorm.
- Bewaar elk groter gevonden palindroom en zijn factoren.
- Druk het antwoord, de factoren en de uitvoeringstijd af.
Python-programma
import time
# Start van de tijdsmeting
starttijd = time.perf_counter()
# Zoek dalend naar het grootste palindroomproduct
grootste_palindroom = 0
eerste_factor = 0
tweede_factor = 0
for factor_a in range(999, 99, -1):
if factor_a * 999 <= grootste_palindroom:
break
for factor_b in range(999, factor_a - 1, -1):
product = factor_a * factor_b
if product <= grootste_palindroom:
break
product_als_tekst = str(product)
if product_als_tekst == product_als_tekst[::-1]:
grootste_palindroom = product
eerste_factor = factor_a
tweede_factor = factor_b
# Stop de tijdsmeting
eindtijd = time.perf_counter()
uitvoeringstijd = eindtijd - starttijd
# Toon het resultaat
print(f"Het grootste palindroom is: {grootste_palindroom}")
print(f"Factoren: {eerste_factor} en {tweede_factor}")
print(f"Uitvoeringstijd: {uitvoeringstijd:.8f} seconden")
Wiskundige achtergrond
Een zescijferig palindroom heeft de vorm
. De waarde ervan is
![]()
Ieder zescijferig palindroom is dus deelbaar door 11. Bij een product dat zo’n palindroom vormt, moet minstens een van beide factoren deelbaar zijn door 11. De Python-oplossing hoeft deze extra eigenschap niet te gebruiken, omdat de gewone afkappingen de zoekruimte al voldoende beperken.
Resultaat
Het grootste palindroomproduct is
![]()
Uitvoeringstijd: ongeveer 0,00099893 seconden.
Besluit
De dalende brute-force aanpak onderzoekt een beperkte zoekruimte en slaat dankzij de afkappingen veel onnodige producten over. Zo vinden we met duidelijke Python-code snel het correcte antwoord 906609.

![Rendered by QuickLaTeX.com \[ A=(0,0),\qquad B=(1,0),\qquad C=\left(\frac12,\frac{\sqrt3}{2}\right). \]](http://www.wiskundemagie.be/wp-content/ql-cache/quicklatex.com-cb89d58be820820505718250134a5417_l3.png)
![Rendered by QuickLaTeX.com \[ O=\left(\frac32,\frac{\sqrt3}{2}\right). \]](http://www.wiskundemagie.be/wp-content/ql-cache/quicklatex.com-63c345ac5bf7465e24b12402f82567cb_l3.png)

![Rendered by QuickLaTeX.com \[ \mathbf n_{AB}=(0,1),\qquad \mathbf n_{AC}=\left(\frac{\sqrt3}{2},-\frac12\right),\qquad \mathbf n_{BC}=\left(\frac{\sqrt3}{2},\frac12\right). \]](http://www.wiskundemagie.be/wp-content/ql-cache/quicklatex.com-12da39d43c8d62855789bcda4d7e9166_l3.png)
![Rendered by QuickLaTeX.com \[ |PM|=r\left(1+\frac{\sqrt3}{2}\cos\theta-\frac12\sin\theta\right). \]](http://www.wiskundemagie.be/wp-content/ql-cache/quicklatex.com-91f5c1f7290b34d49f0e88a692d096a6_l3.png)
![Rendered by QuickLaTeX.com \[ |PL|=r\left(1+\frac{\sqrt3}{2}\cos\theta+\frac12\sin\theta\right). \]](http://www.wiskundemagie.be/wp-content/ql-cache/quicklatex.com-b244eb11219f30e1d05d8c7f03a72554_l3.png)
![Rendered by QuickLaTeX.com \[ \begin{aligned} 2|PM|+2|PN|-3|PL| &=r\left(1-\frac{\sqrt3}{2}\cos\theta-\frac12\sin\theta\right)\\ &=r\left(1-\cos\left(\theta-\frac{\pi}{6}\right)\right). \end{aligned} \]](http://www.wiskundemagie.be/wp-content/ql-cache/quicklatex.com-dabe3bfc4954f8b80868660cf0b4db1a_l3.png)
