Solved project euler 3
authorDavid Kerkeslager <kerkeslager@gmail.com>
Tue, 13 Dec 2016 15:04:45 +0000 (10:04 -0500)
committerDavid Kerkeslager <kerkeslager@gmail.com>
Tue, 13 Dec 2016 15:04:45 +0000 (10:04 -0500)
euler/elixir/0002-sum-of-even-fibonacci.exs [new file with mode: 0644]
euler/elixir/0002-sum-of-fibonacci.exs [deleted file]
euler/elixir/0003-largest-prime-factor.exs [new file with mode: 0644]

diff --git a/euler/elixir/0002-sum-of-even-fibonacci.exs b/euler/elixir/0002-sum-of-even-fibonacci.exs
new file mode 100644 (file)
index 0000000..350ef01
--- /dev/null
@@ -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 (file)
index 350ef01..0000000
+++ /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 (file)
index 0000000..79e7676
--- /dev/null
@@ -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))