From: David Kerkeslager Date: Tue, 13 Dec 2016 15:04:45 +0000 (-0500) Subject: Solved project euler 3 X-Git-Url: https://code.kerkeslager.com/?p=sandbox;a=commitdiff_plain;h=84ed7dbc7fb20d2646f6783b4ed91a8e653092eb Solved project euler 3 --- diff --git a/euler/elixir/0002-sum-of-even-fibonacci.exs b/euler/elixir/0002-sum-of-even-fibonacci.exs new file mode 100644 index 0000000..350ef01 --- /dev/null +++ b/euler/elixir/0002-sum-of-even-fibonacci.exs @@ -0,0 +1,20 @@ +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))) diff --git a/euler/elixir/0002-sum-of-fibonacci.exs b/euler/elixir/0002-sum-of-fibonacci.exs deleted file mode 100644 index 350ef01..0000000 --- a/euler/elixir/0002-sum-of-fibonacci.exs +++ /dev/null @@ -1,20 +0,0 @@ -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))) diff --git a/euler/elixir/0003-largest-prime-factor.exs b/euler/elixir/0003-largest-prime-factor.exs new file mode 100644 index 0000000..79e7676 --- /dev/null +++ b/euler/elixir/0003-largest-prime-factor.exs @@ -0,0 +1,25 @@ +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))