:Addition
<b>Input</b>: entiers positifs x et y, ayant chacun n+1 chiffres en base b
<b>Output</b>: la somme x + y = (w_{n+1}w_n...w_1w_0)_b
r <-- 0
<b>pour</b> i = 0 <b></b> n <b>faire</b>
  w_i <-- (x_i + y_i + r) mod b
  <b>si</b> (x_i + y_i + r) < b <b>faire</b>
    r <-- 0
  <b>sinon</b> <b>faire</b>
    r <-- 1
w_{n+1} <-- r 
<b>Retourner</b> (w_{n+1}w_n...w_O)
n+1 additions
O(T)
pour des entiers de taille  infrieure   \(T\)


:Soustraction
<b>Input</b>: entiers positifs x et y, ayant n+1 chiffres 
   en base b avec x suprieur  y
<b>Output</b>: la diffrence x - y = (w_n...w_1w_0)_b
r <-- 0
<b>pour</b> i = 0 <b></b> n <b>faire</b>
  w_i <-- (x_i - y_i + r) mod b
  <b>si</b> (x_i - y_i + r) >= 0 <b>faire</b>
    r <-- 0
  <b>sinon</b> <b>faire</b>
    r <-- -1
<b>Retourner</b> (w_n...w_O)
n+1 additions lmentaires
O(T)
pour des entiers de taille infrieure  \(T\)


:Multiplication
<b>Input</b>: des entiers positifs x et y ayant  n + 1 
   et t + 1 chiffres en base b
<b>Output</b>: 
<b>pour</b> i = 0 <b></b>  (n + t + 1) <b>faire</b>
  w_i <-- 0
<b>pour</b> i =  0 <b></b>  t <b>faire</b>
  r <-- 0
  <b>pour</b> j = 0 <b></b> n <b>faire</b>
    (uv)_b <-- w_{i+j} + x_j . y_i + r 
    w_{i+j} <-- v, r <-- u
    w_{i + n + 1} <-- u
<b>Retourner</b> (w_{n+t+1} ... w_1 w_0)
(t+1)(n+1) additions et multiplications de base
O(T^2)
pour des entiers de taille infrieure  \(T\)


:Passage en base b
<b>Input</b>: des entiers positifs a et b avec a positif et b suprieur  2.
<b>Output</b>: la reprsentation de a en base b
i <-- 0, x <-- a, q <-- quotient de x par b
a_i <-- x - q * b
<b>tant que </b> q > 0 <b>faire</b>
  i <-- i + 1 , x <-- q
  q <--  quotient de  x par b
  a_i <-- x - q * b
<b>Retourner</b> (a_i ... a_1 a_0)
XX
O(T)
pour un entier \(a\) de taille infrieure  \(T\)


:Division euclidienne
<b>Input</b>: des entiers positifs (crits en base b)  
       x = (x_n ... x_1x_0)_b,  
       y = (y_t ... y_1y_0)_b 
       avec n suprieur ou gal  t >= 1, y_t non nul
<b>Output</b>: le quotient q = (q_{n-t} ... q_1q_0)_b 
   et le reste  r = (r_t ... r_1r_0)_b 
   tels que x = qy + r avec 0 <= r < y 
<b>pour</b> j = 0 <b></b>  n-t <b>faire</b>
  q_j <-- 0
<b>tant que </b> (x >= y b^{n-t}) <b>faire</b>
  q_{n-t}<-- q_{n-t} + 1 , x <-- x - y b^{n-t}
<b>pour</b> i = n <b></b> t+1 (en dcroissant) <b>faire</b>
  <b>si</b> x_i = y_t <b>faire</b>
    poser q_{i-t-1} <-- b-1 ; 
  <b>sinon</b> <b>faire</b>
    q_{i-t-1} <-- quotient de x_i b + x_{i-1} par y_t
  <b>tant que </b> (q_{i-t-1}(y_tb+y_{t-1}) > x_i b^2 + x_{i-1}b+x_{i-2}) <b>faire</b>
    q_{i-t-1}<-- q_{i-t-1} -1 
  x <-- x-q_{i-t-1}yb^{i-t-1}
  <b>si</b> x < 0 <b>faire</b>
    x <-- x + yb^{i-t-1} <b>et</b> q_{i-t-1} <-- q_{i-t-1} - 1
r <-- x
<b>Retourner</b> (q,r)
XX
O(T^2)
pour \(y\) et \(x/y\) de taille infrieure  \(T\)


:Elvation  la puissance
<b>Input</b>: un entier e et un entier g
<b>Output</b>: calcule g^e
A <-- 1, S <-- g
<b>tant que </b> e != 0 <b>faire</b>
  <b>si</b> e est impair <b>faire</b>
    A <-- A.S
  e <-- quotient de e par 2
  <b>si</b> e != 0 <b>faire</b>
    S <-- S . S  
<b>Retourner</b> A
T(e) multiplications
O(T^3)
pour des lments de  \(\ZZ/m\ZZ\) avec \(m\) et \(e\) de taille infrieure  \(T\) pour une multiplication nave quadratique


:Recherche dans une liste
<b>Input</b>: une liste t de taille n et x
<b>Output</b>: dcide si x est dans t
trouv <-- faux
i <-- 1
<b>tant que </b> ((trouv = faux) <b>et</b> (i <= n)) <b>faire</b>
  <b>si</b> t[i] = x <b>faire</b>
    trouv <-- vrai
  i <-- i + 1
<b>Retourner</b> trouv
n tests
O(T)
si la liste est de taille infrieure ou gale  \(T\)


:Recherche dans une liste
<b>Input</b>: une liste t de taille n et x
<b>Output</b>: dcide si x est dans t
trouv <-- faux
<b>pour</b> i=1 <b></b> n <b>faire</b>
  <b>si</b> t[i]=x <b>faire</b>
    trouv <-- vrai
<b>Retourner</b> trouv
n tests
O(T)
si la liste est de taille infrieure ou gale  \(T\)


:Recherche du plus petit lment d'une liste en O(n)
<b>Input</b>: une liste x de longueur n
<b>Output</b>: la position du plus petit lment de la liste x
k <-- 1
<b>pour</b> i = 1 <b></b> n <b>faire</b>
  <b>si</b> x[i] < x[k] <b>faire</b>
    k <-- i
<b>Retourner</b> k
n - 1 comparaisons
O(T)
si la liste est de taille infrieure   \(T\)


:Chercher  x dans un tableau t tri en ordre croissant
<b>Input</b>: une liste t de taille n, x 
<b>Output</b>: la position de x dans t ou -1
g <-- 0, d <-- n - 1
<b>Rpter</b>  
  m <-- (g+d)/2
  <b>si</b> t[m] =  x <b>faire</b>
    <b>Retourner</b> m
  <b>sinon, si</b></b> t[m] < x <b>faire</b>
    d = m - 1
  <b>sinon</b> <b>faire</b>
    g = m + 1
<b>tant que </b> g <= d <b>faire</b>
<b>Retourner</b> -1
Si C(n) est le nombre de comparaisons dans une liste de taille n, C(n) <= C([n/2]) + 1
O(\log(T))
pour des listes de taille infrieure  \(T\)


:chercher x dans les positions de g  d d'un tableau t tri en ordre croissant
<b>Input</b>: t, x, g, d
<b>Output</b>: f(t,x,g,d) est la position de x dans t[g..d-1]  
<b>si</b> g >= d <b>faire</b>
  <b>Retourner</b> -1
m <-- (g + d)/2
<b>si</b> t[m] = x <b>faire</b>
  <b>Retourner</b> m
<b>sinon, si</b></b> t[m] > x <b>faire</b>
  <b>Retourner</b> f(t, x, g, m)
<b>sinon</b> <b>faire</b>
  <b>Retourner</b> f(t, x, m + 1, d)
    
Si C(n) est le nombre de comparaisons dans une liste de taille n, C(n) <= C([n/2]) + 1
O(\log(T))
pour des listes de taille infrieure  \(T\)


:Nombres de Fibonacci
<b>Input</b>: un entier n
<b>Output</b>: Le n-ime nombre de Fibonacci
n_2 <-- 1,  n_1 <-- 1
<b>pour</b> i = 2 <b></b> n <b>faire</b>
  t <-- n_2 + n_1,  n_2 <-- n_1, n_1 <-- t
<b>Retourner</b> t
XX
O(T^2)
pour un entier \(n\) infrieur  \(T\)


:Nombres de Fibonacci
<b>Input</b>: un entier n
<b>Output</b>: n-ime nombre de Fibonacci F_n
q <-- quotient de  n par 2, r <-- n mod 2
a <-- F(q),  b <-- F(q+1)
<b>si</b> r = 1 <b>faire</b>
  <b>Retourner</b> a^2 + b^2
<b>sinon</b> <b>faire</b>
  <b>Retourner</b> a(2b-a)
F(0) = 0 ; F(1) = 1
Si C(n) est le cot de calcul de (F_n, F_{n+1), on a C(n) <= 2C(n/2) + 2M(n) avec M(n) le cot d'une multiplication d'entiers de taille infrieure  An (avec A constant) [on nglige les deux additions]}
O(T^2)
pour un entier \(n\) infrieur  \(T\), avec la multiplication nave


 
 
 
:Nombres de Fibonacci
<b>Input</b>: un entier n
<b>Output</b>: Fib(n) calcule F_n, F_{n+1}
q <-- quotient de n par 2, r <-- n mod 2
(a,b) <-- Fib(q)
<b>si</b> r = 1 <b>faire</b>
  <b>Retourner</b> [a^2 + b^2, b(2a + b)]
<b>sinon</b> <b>faire</b>
  <b>Retourner</b> [a(2b-a), a^2 + b^2]
Fib(0) = [0,1],  Fib(1) = [1,1]
Si C(n) est le cot de calcul de (F_n, F_{n+1), on a C(n) <= C(n/2) + 3M(n) avec M(n) le cot d'une multiplication d'entiers  de taille infrieure  An (avec A constant) [on nglige les deux additions]}
O(T^2)
pour un entier \(n\) infrieur  \(T\), avec la multiplication nave


 
:Recherche de la somme maximum de termes conscutifs
<b>Input</b>: une liste d'entiers [positifs ou ngatifs] de taille n
<b>Output</b>: le maximum des sommes de sous-suites formes 
    de termes conscutifs
maxS <-- 0
<b>pour</b> l = 1 <b></b> n <b>faire</b>
  <b>pour</b> u = l <b></b> n <b>faire</b>
    s = 0
    <b>pour</b>  i = l <b></b>  u <b>faire</b>
      s <-- s + x[i]
      <b>si</b> s > maxS <b>faire</b>
        maxS <-- s
<b>Retourner</b> maxS
Le nombre de passages est en O(n^3)
O(T^3) 
pour une liste  de taille infrieure  \(T\)


:Recherche de la somme maximum de termes conscutifs
<b>Input</b>: une liste d'entiers [positifs ou ngatifs] de taille n
<b>Output</b>: le maximum des sommes de sous-suites formes 
   de termes conscutifs
maxS <-- 0
<b>pour</b> l = 1 <b></b> n <b>faire</b>
  s <-- 0
  <b>pour</b> u = l <b></b> n <b>faire</b>
    s <-- s +  x[u]
    <b>si</b> s > maxS <b>faire</b>
      maxS <-- s
<b>Retourner</b> maxS
Le nombre de passages est en O(n^2)
O(T^2)
pour une liste  de taille infrieure  \(T\)


:Recherche de la somme maximum de termes conscutifs
<b>Input</b>: une liste d'entiers [positifs ou ngatifs] de taille n
<b>Output</b>: subsum(x) est le maximum des sommes de sous-suites 
     formes de termes conscutifs (si tous les termes sont ngatifs, 
     on renvoie 0)
maxS <-- 0, maxI <-- 0
<b>pour</b> i = 1 <b></b>  n <b>faire</b>
  maxI <-- max(maxI + x[i], 0)
  <b>si</b> maxI > maxS <b>faire</b>
    maxS <-- maxI
<b>Retourner</b> maxS
XX
O(T)
pour une liste  de taille infrieure  \(T\)


:Recherche de la somme maximum de termes conscutifs
<b>Input</b>: une liste d'entiers [positifs ou ngatifs] de taille n, 
     1 <= l <= u <= m
<b>Output</b>: subsum(x,l,u) est le maximum des sommes de sous-suites 
   formes de termes conscutifs de x[l..u]
s <-- 0, maxLeft <-- 0, maxRight <-- 0
<b>si</b> l > u <b>faire</b>
  <b>Retourner</b> 0
<b>si</b> l = u <b>faire</b>
  <b>Retourner</b> max(x[l], 0)
m <-- quotient de l + u par  2
maxS <-- max(subsum(x,l, m), subsum(x,m + 1, u))
<b>pour</b> i = m <b></b>  l en dcroissant <b>faire</b>
  s <-- s +  x[i]
  <b>si</b> s > maxLeft <b>faire</b>
    maxLeft <-- s
s <-- 0
<b>pour</b> i = m + 1 <b></b>  u <b>faire</b>
  s <-- s +  x[i]
  <b>si</b> s > maxRight <b>faire</b>
    maxRight <-- s
s <-- maxLeft + maxRight
<b>si</b> s > maxS <b>faire</b>
  maxS <-- s
<b>Retourner</b> maxS
On a C(n) <= 2 C(n/2) + n/2
O(T\log(T))
pour une liste  de taille infrieure  \(T\)


:Factorielle
<b>Input</b>: un entier n
<b>Output</b>: factorielle de n
<b>Retourner</b> n * fact(n-1)
fact(0) <-- 1
XX
exp(O(T))
pour un entier de taille infrieure  \(T\)


:Addition de matrices
<b>Input</b>: deux matrices a et b de taille n 
     coefficients dans un anneau R
<b>Output</b>: la somme a + b
<b>pour</b> i = 1 <b></b> n <b>faire</b>
  <b>pour</b> j = 1 <b></b> n <b>faire</b>
    c[i,j] <-- a[i,j] + b[i,j]
<b>Retourner</b> c
n^2 additions
O(T^2)
en oprations dans l'anneau \(R\) si la taille des matrices est infrieure  \(T\)


:Multiplication de matrices
<b>Input</b>: deux matrices a et b de taille n  coefficients dans un anneau R
<b>Output</b>: le produit ab
<b>pour</b> i = 1 <b></b> n <b>faire</b>
  <b>pour</b> j = 1 <b></b> n <b>faire</b>
    c[i,j] = 0
    <b>pour</b> k = 1 <b></b> n <b>faire</b>
      c[i,j] <-- c[i,j] + a[i,k]*b[k,j]
<b>Retourner</b> c
n^3 multiplications/additions
O(T^3)
en oprations dans \(R\) pour des matrices de taille infrieure  \(T\) 


:Multiplication de matrices
<b>Input</b>: deux matrices a et b de taille n  coefficients dans \Z/m\Z
<b>Output</b>: le produit ab
<b>pour</b> i = 1 <b></b> n <b>faire</b>
  <b>pour</b> j = 1 <b></b> n <b>faire</b>
    c[i,j] = 0
    <b>pour</b> k = 1 <b></b> n <b>faire</b>
      c[i,j] <-- c[i,j] + a[i,k]*b[k,j] mod m
<b>Retourner</b> c
n^3 multiplications/additions
O(T^2)
en oprations dans \(\ZZ/m\ZZ\) pour \(m\) de taille infrieure  \(T\) [pour un cot quadratique des oprations] 


:Somme des N premiers entiers
<b>Input</b>: un entier N
<b>Output</b>: la somme S des N premiers entiers
S <-- 0
<b>pour</b> i = 0 <b></b> N - 1 <b>faire</b>
  S <-- S + i
<b>Retourner</b> S
XX
exp(O(T))
pour des entiers de taille infrieure  \(T\)


:Somme des N premiers entiers
<b>Input</b>: un entier N
<b>Output</b>: la somme S des N premiers entiers
S <-- N*(N - 1)/2
<b>Retourner</b> S
XX
O(T^2)
pour des entiers de taille infrieure  \(T\)


:Produit des lments d'une liste
<b>Input</b>: liste x de n lments dans un anneau R
<b>Output</b>: produit des lments de la liste x 
lx <-- nombre d'lments de la liste xs
<b>si</b> lx = 0 <b>faire</b>
  <b>Retourner</b> 1
<b>sinon, si</b></b> lx = 1 <b>faire</b>
  <b>Retourner</b> x_1
k <-- lx
<b>tant que </b> k > 1 <b>faire</b>
  lx <-- k,  k <-- 0
  <b>pour</b> i = 1 <b></b>  lx-1 par 2 <b>faire</b>
    k <-- k+1
    x[k] <-- x[i] * x[i+1]
  <b>si</b> i = lx <b>faire</b>
    k <-- k+1
    x[k] <-- x[i]
<b>Retourner</b> x[1]
  
XX
O(T)
en termes d'oprations dans l'anneau \(R\) pour une liste de taille infrieure  \(T\)


:Produit des lments d'une liste
<b>Input</b>: x liste de n lments dans Z/mZ
<b>Output</b>: produit des lments de la liste x 
lx <-- nombre d'lments de la liste xs
<b>si</b> lx = 0 <b>faire</b>
  <b>Retourner</b> 1
<b>sinon, si</b></b> lx = 1 <b>faire</b>
  <b>Retourner</b> x_1
x <-- array(L)
k <-- lx
<b>tant que </b> k > 1 <b>faire</b>
  lx <-- k,  k <-- 0
  <b>pour</b> i = 1 <b></b>  lx-1 par 2 <b>faire</b>
    k <-- k+1
    x[k] <-- x[i] * x[i+1]
  <b>si</b> i = lx <b>faire</b>
    k <-- k+1
    x[k] <-- x[i]
x[1]
  
XX
O(T^2)
pour des listes  \(O(1)\) lments de \(\ZZ/m\ZZ\) avec \(m\) de taille infrieure  \(T\)


:Tri par comptage
<b>Input</b>: N enregistrements dont les cls C sont des entiers 
   entre 1 et M
<b>Output</b>: trier les N enregistrements
<b>pour</b> j = 1 <b></b> M <b>faire</b>
  T[j] <-- 0
<b>pour</b> i = 1 <b></b> N <b>faire</b>
  T[C[i]] <-- T[C[i]] + 1
<b>pour</b> j = 2 <b></b> M <b>faire</b>
  T[j] <-- T[j - 1] + T[j]
<b>pour</b> i = N <b></b> 1 <b>faire</b>
  p(T[C[i]] <-- i
  T[C[i]] <-- T[C[i]] - 1
<b>Retourner</b> p
XX
O(T)
si \(N\) est infrieur  \(T\) et \(M = O(N)\)


:Racine carre entire d'un entier n
<b>Input</b>: n un entier positif
<b>Output</b>: le plus grand entier infrieur  la racine de n
d <-- 1 ; racine <-- 0 ;
<b>tant que </b>  d*d <= n <b>faire</b>
  d <-- d*2 ;
<b>tant que </b>  d > 1 <b>faire</b>
  d <-- d / 2 ;
  <b>si</b> (racine + d)*(racine + d) <= n <b>faire</b>
    racine <-- racine + d ;
<b>Retourner</b> racine
C'est une mthode par dichotomie approche par dfaut. 
O(T)
pour des entiers de taille  infrieure   \(T\)


:Racine carre entire d'un entier n 
<b>Input</b>: n un entier positif
<b>Output</b>: la racine carre par dfaut d'un entier n
d <-- 1 ; racine <-- 0 ;
<b>tant que </b>  racine*racine <= n <b>faire</b>
  racine <-- racine + 1 ;
<b>Retourner</b> racine
Mthode nave. Il y a au plus \sqrt(n) passages dans la boucle
exp(O(T))
pour des entiers de taille  infrieure   \(T\)


:Racine carre entire d'un entier n 
<b>Input</b>: n un entier positif
<b>Output</b>: le plus grand entier infrieur  la racine de n
d <-- 1 ; racine <-- 0 ;
<b>tant que </b>  r + d <= n <b>faire</b>
  r <-- r + d ;
  d <-- d + 2
<b>Retourner</b> (d - 1)/2
S'appuie sur la formule : la somme des entiers impairs infrieure   M est gale  M^2. Il y a au plus XXX passages dans la boucle. A chaque test, on fait une multiplication et une addition
O(exp(T))
pour des entiers de taille  infrieure   \(T\)


