Mar
25
Problem #1 in the Project Euler series is:
Add all the natural numbers below one thousand that are multiples of 3 or 5.
A few of the more interesting/elegant solutions I’ve seen are listed below.
C#
1 2 | List<int> Numbers = (Enumerable.Range(0, upperLimit)).ToList(); int Result = (from n in Numbers where n % 3 == 0 || n % 5 == 0 select n).Sum(); |
F#
1 2 3 4 5 6 7 8 9 | #light let rec sum_mul xs = match xs with | [] -> 0 | y::ys when y % 3 = 0 || y % 5 = 0 -> y + sum_mul ys | y::ys -> sum_mul ys let sum = sum_mul [1 .. 999] print_any sum |
Ruby (from csLife)
1 | puts (1...1000).select { |n| n % 3 == 0 or n % 5 == 0 }.inject { |sum, n| sum + n } |
Haskell
1 | sum [n | n <- [1..1000-1], n 'mod' 5 == 0 || n 'mod' 3 == 0] |
Erlang
1 2 3 4 5 | -module(euler_1). -export([start/0,solve_euler_1/1]). start() -> io:format("~w~n",[solve_euler_1(1000)]). solve_euler_1(N) -> lists:sum([X || X <- lists:seq(1,N-1), (X rem 3 == 0) or (X rem 5 == 0)]). |