From eb3655dcb6c6ee1030582e07a0b0aa6eb51ecd2e Mon Sep 17 00:00:00 2001
From: EdouardParis <mail@edouard.paris>
Date: Tue, 31 May 2016 18:07:07 +0200
Subject: [PATCH] Question 9

---
 src/Makefile       |  5 ++++-
 src/question_9.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++
 src/test.sh        | 22 ++++++++++++++++++++--
 3 files changed, 68 insertions(+), 3 deletions(-)
 create mode 100644 src/question_9.cpp

diff --git a/src/Makefile b/src/Makefile
index 922faf6..8628c30 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,4 +1,4 @@
-all: question_3 question_5
+all: question_3 question_5 question_9
 
 question_3:  question_3.cpp 
 		g++ -o ./bin/question_3 question_3.cpp -Wall -Wextra -lgmp -lgmpxx
@@ -6,6 +6,9 @@ question_3:  question_3.cpp
 question_5:  question_5.cpp 
 		g++ -o ./bin/question_5 question_5.cpp -Wall -Wextra -lgmp -lgmpxx
 
+question_9:  question_9.cpp 
+		g++ -o ./bin/question_9 question_9.cpp -Wall -Wextra -lgmp -lgmpxx
+
 test:
 	./test.sh
 
diff --git a/src/question_9.cpp b/src/question_9.cpp
new file mode 100644
index 0000000..bfbe25d
--- /dev/null
+++ b/src/question_9.cpp
@@ -0,0 +1,44 @@
+/*Projet Edouard Paris 2016 - Arithmetique entière
+ *
+ * Question 9
+ * */
+
+#include <iostream>
+#include <cstdlib>
+#include <gmpxx.h>
+#include <cassert>
+
+void algo_k_root(mpz_class const& a, long const k, mpz_class & res) 
+{
+  mpz_class r1 = a + 1; 
+  mpz_class r2 = a; 
+  mpz_class r3 = a; 
+  
+  while (r2 < r1 && r2 != 0) {
+    r1 = r2; 
+    mpz_pow_ui(r3.get_mpz_t(), r1.get_mpz_t(), (k-1));
+    r2 = (r1*(k - 1) + (a / r3))/k;
+  }
+  
+  mpz_pow_ui(r3.get_mpz_t(), r2.get_mpz_t(), k);
+
+  if ((a - r3) < 0) {
+    res = r2 - 1;
+  } else {
+    res = r2;
+  }
+};
+
+int main(int argc, char** argv) {
+  assert(argc == 3);
+  long n = strtol(argv[1], NULL, 10);
+  long k = strtol(argv[2], NULL, 10);
+
+  mpz_class a(n);
+  mpz_class res;
+
+  algo_k_root(a, k, res);
+  
+  std::cout << res << std::endl;
+  return 0;
+}
diff --git a/src/test.sh b/src/test.sh
index 2b1de82..b4325b7 100755
--- a/src/test.sh
+++ b/src/test.sh
@@ -2,15 +2,33 @@
 test () {
   var=`./bin/question_3 $1`;
   if [ $var == $2 ]; then 
-    echo "SUCCESS $1 $var"
+    echo "SUCCESS $1 = $var^2"
   else
-    echo "FAIL $1 EXPECTING $2 GET $var"
+    echo "FAIL $1 = $2^2 GET $var^2"
   fi
 }
 
+test2 () {
+  var=`./bin/question_9 $1 $2`;
+  if [ $var == $3 ]; then 
+    echo "SUCCESS $1 = $var^$2"
+  else
+    echo "FAIL $1 = $3^$2 GET $var^$2"
+  fi
+}
+
+
 test 10 3
 test 48 6
 test 49 7
 test 50 7
 test 100 10
 test 1000 31
+
+
+
+test2 10 3 2
+test2 1000 3 10
+test2 15625 6 5
+test2 15624 6 4
+test2 15626 6 5
-- 
GitLab