Project Euler 001 – Veelvouden van 3 en 5

Probleemstelling

Wanneer alle natuurlijke getallen kleiner dan 10 die een veelvoud zijn van 3 of 5 worden opgeteld, bekomt men

3 + 5 + 6 + 9 = 23.

Bepaal de som van alle natuurlijke getallen kleiner dan 1000 die een veelvoud zijn van 3 of 5.


Eerste analyse

Voor deze eerste Euler-opgave is een brute-force aanpak voldoende en het meest begrijpelijk. We lopen alle natuurlijke getallen van 1 tot en met 999 door en controleren voor elk getal of het een veelvoud is van 3 of 5. Omdat er slechts 999 waarden onderzocht moeten worden, is deze aanpak snel genoeg en zeer geschikt voor een eerste opgave.


Programmeeraanpak

We gebruiken een eenvoudige lus die alle getallen van 1 tot en met 999 doorloopt. Voor elk getal controleren we of het deelbaar is door 3 of door 5. Indien dit het geval is, voegen we het getal toe aan de som.

Deze aanpak is direct, leesbaar en correct.


Algoritme

  1. Initialiseer een variabele som met waarde 0.
  2. Loop over alle getallen van 1 tot en met 999.
  3. Controleer voor elk getal of het deelbaar is door 3 of door 5.
  4. Voeg het getal toe aan som als één van beide voorwaarden waar is.
  5. Druk het eindantwoord en de uitvoeringstijd af.

Python-programma

import time


# Start van de tijdsmeting
starttijd = time.perf_counter()


# Bereken de som van alle veelvouden van 3 of 5 kleiner dan 1000
som = 0

for getal in range(1, 1000):
    if getal % 3 == 0 or getal % 5 == 0:
        som += getal


# Stop de tijdsmeting
eindtijd = time.perf_counter()
uitvoeringstijd = eindtijd - starttijd


# Toon het resultaat
print(f"De gevraagde som is: {som}")
print(f"Uitvoeringstijd: {uitvoeringstijd:.8f} seconden")

Oplossing

We onderzoeken alle natuurlijke getallen kleiner dan 1000. Voor elk getal controleren we of het een veelvoud is van 3 of 5. Als dat zo is, tellen we het getal mee in de som. Daarna drukken we de eindsom af.

Deze aanpak levert het juiste antwoord, omdat alle relevante getallen precies één keer worden gecontroleerd.


Wiskundige oplossing

Een compacte wiskundige oplossing gebruikt de somformule van een rekenkundige reeks.

We berekenen apart:

  • de som van alle veelvouden van 3;
  • de som van alle veelvouden van 5;
  • en trekken vervolgens de dubbeltellingen van de veelvouden van 15 weer af.

Dus:

    \[3(1+2+\cdots+333) + 5(1+2+\cdots+199) - 15(1+2+\cdots+66)\]

Met

    \[1+2+\cdots+n=\frac{n(n+1)}{2}\]

volgt:

    \[3\cdot\frac{333\cdot 334}{2} + 5\cdot\frac{199\cdot 200}{2} - 15\cdot\frac{66\cdot 67}{2} = 233168\]

Daarom is het antwoord:

    \[\boxed{233168}\]


Eindantwoord

De gevraagde som is 233168.


Uitvoeringstijd

De uitvoeringstijd van het Python-programma bedraagt 0.00010779 seconden.


Besluit

Deze aanpak is eenvoudig, helder en volledig geschikt voor deze eerste Euler-opgave. De brute-force methode levert direct het juiste resultaat en is tegelijk een uitstekende introductie tot programmeren en probleemoplossen.