### 6.7.12 Reste entier de la division euclidienne : `irem remain smod mods mod %`

- `irem` (ou `remain`) désigne le reste entier r de la division euclidienne des deux entiers a et b donnés en argument (a=b*q+r avec 0≤ r< b).
  Pour les entiers de Gauss, on choisit q pour b*q soit le plus proche possible de a et on peut montrer que l’on peut choisir r tel que |r|2 ≤ |b|2/2.
  On tape :
  `irem(148,5)`
  On obtient :
  `3`
  `irem` travaille avec des entiers longs ou des entiers de Gauss.
  On tape :
  `irem(factorial(148),factorial(45)+2 )`
  On obtient :
  `111615339728229933018338917803008301992120942047239639312`
  ou encore
  `irem(25+12*i,5+7*i)`
  On obtient :
  `-4+i`
  On a :
  a−b*q=−4+i et on a |−4+i|2=17<|5+7*i|2/2=74/2=37
- `smod` ou `mods` est préfixé et a 2 entiers comme arguments.
  `smod` ou `mods` désigne le reste entier symétrique s de la division euclidienne des deux entiers a et b donnés en argument (a=b*q+s avec −b/2<s ≤ b/2).
  On tape :
  `smod(148,5)`
  On obtient :
  `-2`
- `mod` ou `%` sert à désigner un nombre modulaire.
  `mod` ou `%` est infixé et renvoie un nombre modulaire. Attention `%` doit être suivi d’un espace.
  On tape :
  `148 mod 5`
  ou
  `148 % 5`
  On obtient :
  `-2 % 5`
  ce qui veut dire que `148 mod 5=-2 mod 5` et que `148 mod 5` et −2 % 5 sont des éléments de Z/5Z (voir 6.34 pour avoir les opérations possibles dans Z/5Z).

Remarque
Si on veut passer d’un élément de Z/5Z à un élément de Z, on tape `% 0` : On tape :

`(148% 5)% 0`

On obtient :

`-2`