P1
projecteuler.net

Multiples of 3 or 5

ℹ️Published on Friday, 5th October 2001, 06:00 pm; Solved by 1025302;
Difficulty rating: 5%

If we list all the natural numbers below $10$ that are multiples of $3$ or $5$, we get $3, 5, 6$ and $9$. The sum of these multiples is $23$.

Find the sum of all the multiples of $3$ or $5$ below $1000$.



Soluzione

Formalmente, vorremo trovare

\[ S = \sum_{\substack{n \in [1,1000) \\ n \equiv 0 \text{ mod } (3,5)}} n = 3+5+6+9+10+12+\ldots + 999 \]

Quindi l'idea è che possiamo calcolare questa somma raccogliendo tutti i fattori di 3 e 5, ottenendo \(3(1+2+\ldots+h)+5(1+2+\ldots+k)\), con \(h\) e \(k\) i limiti opportuni per ottenere un loro multiplo senza sforare 1000, quindi \(h=333\) e \(k=199\). In questo modo però staremmo contando due volte i multipli di 3 e 5, come 15, 30, 45, ecc; quindi occorre correggere il calcolo sottraendo per i multipli di 15, ovvero \(15(1+2+\ldots+r)\), dove il limite \(r\) ora corrisponde a 66 (dato che \(15\cdot66 = 990\) mentre \(15\cdot 67 = 1005\)). Dopodiché, si può calcolare \(S\) applicando sulle varie somme la formuletta

\[ \sum_{i=1}^n i = \frac{n(n+1)}{2} \]

Questo esercizio si può quindi risolvere tranquillamente su carta, e questa sarebbe la sua formulazione equivalente in codice

sum_to_n(n) = n*(n+1)/2 # o anche solo sum(collect(1:n))
S = 3*sum_to_n(333) + 5*sum_to_n(199) - 15*sum_to_n(66)
233168.0

ma comunque ci si può ovviamente arrivare anche con approcci puramente informatici:

# one-liner
sum([i for i in 1:999 if (i%3==0 || i%5==0)])
233168
# simulazione estesa
S = 0
for i in 1:999
	if i%3 == 0 || i%5 == 0
		global S += i
	end
end
@show S
S = 233168
Last modified: June 14, 2025. Website built with Franklin.jl and the lovely Julia programming language.