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);