diff --git a/src/algo_ex1.cpp b/src/algo_ex1.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e6c32ea40d65bb9b92c8e32e3d35186d3ce95edd
--- /dev/null
+++ b/src/algo_ex1.cpp
@@ -0,0 +1,23 @@
+//algo used by question 3 and 5
+//gmp ne retourne que la partie entière inférieure lors de ses opérations.
+#include <ctime>
+#include <gmpxx.h>
+
+time_t sqrt(mpz_class const& a, mpz_class & res) 
+{
+  mpz_class r1 = a; 
+  mpz_class r2 = a; 
+
+  struct timespec t0, t1;
+  
+  clock_gettime( CLOCK_REALTIME, &t0);
+  while (r2 < r1) {
+    r2 = (r1 + (a / r1))/2;
+    r1 = r2; 
+  }
+  res = r1;
+  clock_gettime( CLOCK_REALTIME, &t1);
+  
+  time_t t_res = 1000.*(t1.tv_sec-t0.tv_sec) + (t1.tv_nsec-t0.tv_nsec)/1000000.;
+  return t_res;
+}; 
diff --git a/src/algo_ex1.h b/src/algo_ex1.h
new file mode 100644
index 0000000000000000000000000000000000000000..a9a13a6d7fb86d02c9827981ccbd31e4cc05576c
--- /dev/null
+++ b/src/algo_ex1.h
@@ -0,0 +1,4 @@
+#include <ctime>
+#include <gmpxx.h>
+
+time_t sqrt(mpz_class const& a, mpz_class & res);