From b4f182024c149c4db917e37850af1923ee6e8a30 Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Tue, 8 Sep 2026 14:14:16 -0700 Subject: [PATCH] lab01 --- labs/01/lab1.ex | 36 +++++++++++++++++++++++++++++ lectures/01/lec1.ex | 2 +- lectures/01/{notes.exs => notes.ex} | 0 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 labs/01/lab1.ex rename lectures/01/{notes.exs => notes.ex} (100%) diff --git a/labs/01/lab1.ex b/labs/01/lab1.ex new file mode 100644 index 0000000..032e2a5 --- /dev/null +++ b/labs/01/lab1.ex @@ -0,0 +1,36 @@ +defmodule Lab1 do + # Question 1 - Multiplicitive inverse of a module n + defp inverse_mod(r, t, newr, _) when newr == 0 do {r, t} end + defp inverse_mod(r, t, newr, newt) do + q = div(r, newr) + inverse_mod( + newr, + newt, + r - q * newr, + t - q * newt + ) + end + + def inverse_mod(a, n) do + case inverse_mod(n, 0, a, 1) do + {r, _} when r > 1 -> + :not_invertable + + {_, t} when t < 0 -> + t + n + + {_, t} -> + t + end + end + + # Question 2 - Fast modular exponent + defp pow_mod(acc, _, m, _) when m == 0, do: acc + defp pow_mod(acc, a, m, n), do: pow_mod( + rem(acc * a, n), a, m - 1, n + ) + + def pow_mod(a, m, n) do + rem(pow_mod(1, a, m, n), n) + end +end diff --git a/lectures/01/lec1.ex b/lectures/01/lec1.ex index 354afd3..2ead961 100644 --- a/lectures/01/lec1.ex +++ b/lectures/01/lec1.ex @@ -11,7 +11,7 @@ defmodule Lec1 do def fact2(n) do n * fact2(n - 1) end def fact3(n) when n <= 0 do 1 end # using guard - def fact3(n) do n * fact3(n - 1) end + def fact3(n) do n * fact3(n - 1) end # What on earth is going on? # do: with commas eliminates end? diff --git a/lectures/01/notes.exs b/lectures/01/notes.ex similarity index 100% rename from lectures/01/notes.exs rename to lectures/01/notes.ex