Skip to content
Extraits de code Groupes Projets
Valider eb3655dc rédigé par EdouardParis's avatar EdouardParis
Parcourir les fichiers

Question 9

parent 03221fc7
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
all: question_3 question_5 all: question_3 question_5 question_9
question_3: question_3.cpp question_3: question_3.cpp
g++ -o ./bin/question_3 question_3.cpp -Wall -Wextra -lgmp -lgmpxx g++ -o ./bin/question_3 question_3.cpp -Wall -Wextra -lgmp -lgmpxx
...@@ -6,6 +6,9 @@ question_3: question_3.cpp ...@@ -6,6 +6,9 @@ question_3: question_3.cpp
question_5: question_5.cpp question_5: question_5.cpp
g++ -o ./bin/question_5 question_5.cpp -Wall -Wextra -lgmp -lgmpxx 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:
./test.sh ./test.sh
......
/*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;
}
...@@ -2,15 +2,33 @@ ...@@ -2,15 +2,33 @@
test () { test () {
var=`./bin/question_3 $1`; var=`./bin/question_3 $1`;
if [ $var == $2 ]; then if [ $var == $2 ]; then
echo "SUCCESS $1 $var" echo "SUCCESS $1 = $var^2"
else else
echo "FAIL $1 EXPECTING $2 GET $var" echo "FAIL $1 = $2^2 GET $var^2"
fi 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 10 3
test 48 6 test 48 6
test 49 7 test 49 7
test 50 7 test 50 7
test 100 10 test 100 10
test 1000 31 test 1000 31
test2 10 3 2
test2 1000 3 10
test2 15625 6 5
test2 15624 6 4
test2 15626 6 5
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment