diff --git a/gcd.lisp b/gcd.lisp
index e69de29..f56c1f4 100644
--- a/gcd.lisp
+++ b/gcd.lisp
@@ -0,0 +1,6 @@
+(in-package :math-algo)
+
+(defun my-gcd-iter-impl (a b)
+  (if (= b 0)
+      a
+      (my-gcd-recu-impl b (rem a b))))
diff --git a/math-algorithm.asd b/math-algorithm.asd
index 8fcf3fc..f9469b8 100644
--- a/math-algorithm.asd
+++ b/math-algorithm.asd
@@ -21,6 +21,7 @@
    (:file "fast-expt" :depends-on ("packages" "square" "even?" "halve"))
    (:file "fast-mult" :depends-on ("packages" "double" "halve"))
    (:file "fib" :depends-on ("packages"))
+   (:file "gcd" :depends-on ("packages"))
    (:file "halve" :depends-on ("packages"))
    (:file "odd?" :depends-on ("packages"))
    (:file "square" :depends-on ("packages"))
diff --git a/packages.lisp b/packages.lisp
index 615d948..5a0b494 100644
--- a/packages.lisp
+++ b/packages.lisp
@@ -23,6 +23,7 @@
            my-fib-do-impl
            my-fib-recu-impl
            my-fib-iter-impl
+           my-gcd-iter-impl
            my-halve
            my-odd?
            my-square