Adloun

algorithmique (école d'ingénieur) · Chapitre 11 · Exercice de TD

Division euclidienne

Programmes justes : logique de Hoare et invariants · niveau 3 (difficile)

Énoncé

On veut le quotient et le reste de la division de par , sans utiliser / ni % sur .

  • Écrire une fonction sur l'invariant , par soustractions successives. Complexité ?
  • Accélérer : calculer d'abord avec puissance de et , puis travailler sur l'invariant : « » en divisant et par à chaque tour. Écrire la progression et la fonction. Complexité ?
  • Comparer les nombres de tours pour et .

Corrigé

  • Initialisation , . Progression : . Arrêt : , donc .

static int[] divisionSoustraction(int a, int b) {  // a ≥ 0, b > 0
    int q = 0, r = a;                 // a = q×b + r et r ≥ 0
    while (r >= b) {                  // a = q×b + r et r ≥ b
        q = q + 1; r = r - b;         // a = q×b + r et r ≥ 0
    }                                 // a = q×b + r et 0 ≤ r < b
    return new int[] {q, r};
}

La boucle fait tours : , exponentiel en le nombre de chiffres de .

  • Une première boucle double jusqu'à ; alors est vrai. Progression : si , on divise et par ; on a alors , et , . Arrêt : , donc et .

static long[] divisionRapide(long a, long b) {     // a ≥ 0, b > 0
    long c = b, p = 1;                // c = p × b
    while (c <= a) { c = 2 * c; p = 2 * p; }       // c = p × b > a
    long q = 0, r = a;                // J : a = q×b + r, 0 ≤ r < c, c = p×b
    while (p != 1) {                  // J et p ≠ 1
        c = c / 2; p = p / 2;         // a = q×b + r et 0 ≤ r < 2c
        if (r >= c) { r = r - c; q = q + p; }      // J
    }                                 // a = q×b + r et 0 ≤ r < b
    return new long[] {q, r};
}

Chaque boucle fait tours environ : . C'est l'algorithme de la division posée, en base .

  • Pour et , le quotient est et le reste . La première fonction fait tours, la seconde ( doublements puis divisions par ).

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →