On s'intéresse au calcul de division euclidienne de deux entiers, connaissant au préalable les opérations d'addition, de soustraction, de multiplication, et de comparaison, entre des nombres entiers. Il est facile de ramener le problème à deux entiers positifs, et on se restreint à ce cas.
Les algorithmes décrits ci-dessous calculent le quotient de la division euclidienne ; il est bien clair que le reste s'en déduit. Attention, le contraire ne serait pas vrai.
La première méthode, naturelle mais naïve, demande beaucoup trop de calculs pour des grands nombres. On présente ensuite deux méthodes courantes, de complexité semblable : la première convient pour des calculs en base 2, et donc pour une programmation informatique ; la deuxième méthode, essentiellement équivalente, est une adaptation pour la base de numération habituelle, la base décimale, et convient donc pour des calculs à la main. C'est l'algorithme enseigné à l'école.
Méthode naïve
Pour effectuer la division euclidienne de a par b, on construit une suite arithmétique strictement décroissante (ai) de raison (-b) : a0 = a, puis ai+1=ai−b=a−(i+1)×b. Il existe donc un plus petit entier I tel que aI < b : c'est-à-dire a−I×b<b≤a−(I−1)×b, ce qui s'écrit encore 0≤a−I×b<b. Le quotient de la division cherchée est donc I, et le reste a−I×b.
Le nombre de pas de cet algorithme est donc I c'est à dire la partie entière de ba; chaque étape requiert une soustraction et une comparaison ; la complexité de calcul croît linéairement avec a, c'est-à-dire exponentiellement avec la taille de a - si on convient de mesurer la taille d'un entier par le nombre de chiffres que requiert son développement binaire (ou décimal si on préfère, cela ne modifie les choses que d'une constante), cette taille est de l'ordre du logarithme de l'entier.
Méthode courante, binaire
Une simple amélioration consiste à faire une recherche dichotomique, sur le quotient : au lieu de parcourir comme précédemment tous les entiers depuis 0 en attendant de tomber sur le bon quotient, on va commencer par trouver rapidement un entier dont on sera sûr qu'il est plus grand que le quotient cherché ; dans la liste finie de quotients possibles restants, on fera une recherche dichotomique.
Le premier calcul se fait simplement en considérant la suite géométrique 2. Tant que 2n×b≤a, on incrémente n de 1 à chaque étape. Soit N le plus petit entier tel que 2N×b>a. Le nombre d'étapes pour trouver cet entier est de l'ordre de log2(ba) . Chacune de ces étapes ne demande qu'une multiplication par deux (encore plus facile qu'une addition, pour une écriture binaire), et une comparaison.
Pour le deuxième calcul, on construit deux suites (αn) et (βn) ; l'une stockera des minorants du quotient cherché, l'autre des majorants stricts. On pose donc α0 = 2 et β0 = 2, puis par récurrence :
si 2αn+βn×b≤a, alors on peut affiner le minorant, et on pose donc αn+1=2αn+βn et βn+1=βn
en revanche, si 2αn+βn×b>a, on peut affiner le majorant, et on pose βn+1=2αn+βn, et αn+1=αn.
On montre facilement par récurrence qu'à chaque étape n de ce deuxième calcul, αn et βn sont deux entiers, tous deux multiples de 2 et dont la différence vaut 2 ; cette remarque permet notamment de montrer que les suites sont bien définies jusqu'à n = N − 1, et que αN − 1 et βN − 1 ne diffèrent que de 1 ; puisqu'ils sont respectivement un minorant large et un majorant strict du quotient, αN − 1est le quotient cherché.
Le nombre maximal d'étapes pour ce calcul est de l'ordre de log2(ba) (une des dichotomies a pu donner le bon quotient avant la N - 1 étape, c'est le cas d'égalité de la comparaison, auquel cas on peut arrêter l'algorithme avant), qui chacune n'exige qu'une addition, une division par deux (facile en écriture binaire, ce n'est évidemment pas une division euclidienne cachée), une multiplication (qui peut être évitée, en gérant plus de variables), et une comparaison.
En concaténant les résultats des deux calculs, on voit que cet algorithme a une complexité qui croît logarithmiquement avec ba, et donc linéairement avec la taille de a . L'amélioration est donc très nette.
Méthode courante, décimale
Soit deux entiers naturels a et b=0 dont on veut effectuer la division. On commence par trouver la plus petite puissance de 10 telle que b×10N1+1≥a ; d'après le théorème de division euclidienne, il existe alors un unique entier 0≤q1<10 tel que : q1×10N1×b≤a<(q1+1)×10N1×b. On se ramène donc à faire la division de a−q1×10N1×b par b ; l'inégalité précédente montre que la première puissance de 10 telle que 10N2×b excèdera a−q1×10N1×b sera strictement plus petite que 10N1+1 ; on la note 10N2+1. On construit ainsi une suite d'entiers naturels (Ni) strictement décroissante ; elle vaut donc 0 à un certain rang ; on construit la suite d'entiers 0≤qi<10 associée de la même façonqu'on a construit q1. Le quotient cherché sera ∑iqi10Ni : en effet l'inégalité qui donne qr pour la première occurrence de Nr = 0 sera : 0≤a−b×∑iqi10Ni<10Nr×b=b, ce qui est bien la définition du quotient.
On remarque que cette méthode se divise comme la précédente en deux étapes : d'abord une recherche d'une puissance assez grande, ce qui demande à nouveau un nombre de calcul logarithmique en a, c'est-à-dire linéaire en la taille de a ; ensuite un calcul de tous les coefficients qi associés au différentes puissances de 10 inférieures à la puissance assez grande obtenue. Pour chaque calcul de qi, l'algorithme demande en fait un calcul de division euclidienne intermédiaire ; mais le quotient est à chercher seulement parmi les entiers de 0 à 9 ; il se fait donc rapidement en utilisant des tables.
Cette méthode est celle utilisée en primaire lorqu'il s'agit de poser une division.