--- /dev/null
+defmodule SumOfEvenFibonacci do
+ def fibonacci_stream() do
+ items_with_prev = Stream.iterate({0,1}, fn({prev, curr}) -> {curr, prev + curr} end)
+ Stream.map(items_with_prev, fn({_, curr}) -> curr end)
+ end
+
+ def fibonacci_to(limit) do
+ Stream.take_while(fibonacci_stream(), fn(n) -> n < limit end)
+ end
+
+ def filter_even(stream) do
+ Stream.filter(stream, fn(n) -> rem(n, 2) == 0 end)
+ end
+
+ def even_fibonacci_to(limit) do
+ filter_even(fibonacci_to(limit))
+ end
+end
+
+IO.inspect(Enum.sum(SumOfEvenFibonacci.even_fibonacci_to(4_000_000)))
+++ /dev/null
-defmodule SumOfEvenFibonacci do
- def fibonacci_stream() do
- items_with_prev = Stream.iterate({0,1}, fn({prev, curr}) -> {curr, prev + curr} end)
- Stream.map(items_with_prev, fn({_, curr}) -> curr end)
- end
-
- def fibonacci_to(limit) do
- Stream.take_while(fibonacci_stream(), fn(n) -> n < limit end)
- end
-
- def filter_even(stream) do
- Stream.filter(stream, fn(n) -> rem(n, 2) == 0 end)
- end
-
- def even_fibonacci_to(limit) do
- filter_even(fibonacci_to(limit))
- end
-end
-
-IO.inspect(Enum.sum(SumOfEvenFibonacci.even_fibonacci_to(4_000_000)))
--- /dev/null
+defmodule LargestPrimeFactor do
+ def largest_prime_factor(start, n) do
+ if start >= (n / 2) do
+ n
+ else
+ if rem(n, start) == 0 do
+ largest_prime_factor(start, div(n, start))
+ else
+ largest_prime_factor(start + 2, n)
+ end
+ end
+ end
+
+ def largest_prime_factor(n) do
+ n_next = if rem(n, 2) == 0 do
+ div(n, 2)
+ else
+ n
+ end
+
+ largest_prime_factor(3, n_next)
+ end
+end
+
+IO.puts(LargestPrimeFactor.largest_prime_factor(600851475143))