algorithmique (école d'ingénieur) · Chapitre 12 · Exercice de TD
Racine -ème entière
Recherche séquentielle, dichotomique, arrière · niveau 2
Énoncé
Généraliser la fonction racine du cours au calcul de pour un entier et un entier . Le calcul de peut dépasser la capacité d'un long : écrire une fonction qui décide si sans jamais dépasser . Tester avec égal à Long.MAX_VALUE et .
Corrigé
On garde l'invariant du cours, . Comme , la racine est inférieure à : on part de et .
Pour tester sans dépassement, on multiplie par tant que (division entière) : si , alors , et il est inutile de continuer.
static boolean puissanceInfEgal(long m, int k, long a) { // m >= 1
long p = 1;
// I(i) : p = m^i et p <= a
for (int i = 0; i < k; i++) {
if (p > a / m) return false; // p*m > a : donc m^k > a
p = p * m;
}
return true;
}
static long racineK(long a, int k) {
long g = 0, d = Math.min(a, 3_037_000_499L) + 1;
// I(g,d) : g^k <= a < d^k
while (d - g > 1) {
long m = g + (d - g) / 2; // g < m < d, donc m >= 1
if (puissanceInfEgal(m, k, a)) g = m; else d = m;
}
return g; // g^k <= a < (g+1)^k
}
racineK(1000,3)=10 racineK(999,3)=9 racineK(2^62,2)=2147483648 racineK(Long.MAX,5)=6208 racineK(1,7)=1
On vérifie . Une première version qui calculait directement retournait une valeur fausse pour Long.MAX_VALUE : le produit débordait et devenait négatif. La complexité est .
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.