next up previous contents index
suivant: Une méthode plus rapide monter: Fonction partage ou nombre précédent: L'énoncé   Table des matières   Index

La solution

  1. On trouve :
    p(0) = 1, p(1) = 1, p(2) = 2, p(3) = 3, p(4) = 5, p(5) = 7, p(6) = 11, p(7) = 15
  2. Soit A une matrice triangulaire inférieure tel que :
    si k $ \leq$ j, A[j, k] represente le nombre de partitions de j tel que $ \lambda_{1}^{}$ = k $ \geq$ $ \lambda_{2}^{}$ $ \geq$ ...$ \lambda_{m}^{}$ > 0. Sur l'exemple
    p(5)=7 car les 7 partitions distinctes de 5 sont :
    1 + 1 + 1 + 1 + 1 = 5 donc A[5, 1] = 1
    2 + 1 + 1 + 1 = 5
    2 + 2 + 1 = 5 donc A[5, 2] = 2
    3 + 1 + 1 = 5
    3 + 2 = 5 donc A[5, 3] = 2
    4 + 1 = 5 donc A[5, 4] = 1
    5 = 5 donc A[5, 5] = 1
    On a alors p(j) = $ \sum_{{k=0}}^{j}$A[j, k].
    On remarque donc :
    A[0, 0] = 1 et A[j, 0] = 0 (car $ \lambda_{m}^{}$ > 0 sauf pour j = 0 puisque p(0) = 1
    A[j, j] = 1 puisque j = j
    A[j, 1] = A[j - 1, 1] = 1 puisque j = j - 1 + 1 = j - 2 + 1 + 1 = 1 + 1... + 1
    A[j, 2] = A[j - 2, 1] + A[j - 2, 2] puisque j = 2 + 1 + 1 + ... = 2 + 2 + ....
    A[j, 3] = A[j - 3, 1] + A[j - 3, 2] + A[j - 3, 3] puisque j = 3 + 1 + 1 + ...1 = 3 + 2 + .... = 3 + 3 + ....
    etc...
    A[j, j - 1] = A[j - 1, j - 1] = 1 puisque j = (j - 1) + 1
    ou encore :
    les coefficients d'indice 0 de toutes les lignes sont nuls et
    pour k = 1..n le coefficient d'indice k de la n-ième ligne est obtenu en faisant la somme des coefficients d'indice 0..k de la n - k-ième ligne c'est à dire :

    A[n, k] = $\displaystyle \sum_{{j=1}}^{k}$A[n - k, j] et

    A[n, n] = 1 et A[n, 0] = 0 si n > 0

    Voici l'illustration pour n = 5 avec
    k = 2, on a 5=0+1+4 :
    k = 3, on a 8=0+1+3+4 :
    k = 4, on a 9=0+1+3+3+2 :
    ....

    $\displaystyle \left(\vphantom{\begin{array}{ccccccccccc}
\underline1 & \underl...
... & 1 & 1 & 0 \\
0 & 1 & 5 & 8 & 9 & 7 & 5 & 3 & 2 & 1 & 1
\end{array}}\right.$$\displaystyle \begin{array}{ccccccccccc}
\underline1 & \underline0 & \underlin...
... & 3 & 2 & 1 & 1 & 0 \\
0 & 1 & 5 & 8 & 9 & 7 & 5 & 3 & 2 & 1 & 1
\end{array}$$\displaystyle \left.\vphantom{\begin{array}{ccccccccccc}
\underline1 & \underl...
... & 1 & 1 & 0 \\
0 & 1 & 5 & 8 & 9 & 7 & 5 & 3 & 2 & 1 & 1
\end{array}}\right)$

    On va faire un programme qui va calculer les coefficients de la matrice A.

    On tape :

    partitions(n):={
      local A,j,k,m,S;
      A:=idn(n+1);
      pour j de 2 jusque n faire
        pour k de 1 jusque j-1 faire
          S:=0;
          pour m de 1 jusque k faire
            S:=S+A[j-k,m];
          fpour;
          A[j,k]:=S;
        fpour;
      fpour;
      retourne A;
    }:;
    
    On tape : A:=partitions(10)
    On obtient :

    $\displaystyle \left(\vphantom{\begin{array}{ccccccccccc}
1 & 0 & 0 & 0 & 0 & 0 ...
... & 1 & 1 & 0 \\
0 & 1 & 5 & 8 & 9 & 7 & 5 & 3 & 2 & 1 & 1
\end{array}}\right.$$\displaystyle \begin{array}{ccccccccccc}
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 ...
... & 3 & 2 & 1 & 1 & 0 \\
0 & 1 & 5 & 8 & 9 & 7 & 5 & 3 & 2 & 1 & 1
\end{array}$$\displaystyle \left.\vphantom{\begin{array}{ccccccccccc}
1 & 0 & 0 & 0 & 0 & 0 ...
... & 1 & 1 & 0 \\
0 & 1 & 5 & 8 & 9 & 7 & 5 & 3 & 2 & 1 & 1
\end{array}}\right)$

    On tape : sum(A[k])$(k=0..10)
    On obtient : 1,1,2,3,5,7,11,15,22,30,42

    On peut faire un autre programme qui renverra la matrice B qui sera tel que : si k $ \leq$ j, A[j, k] represente le nombre de partitions de j tel que k > = $ \lambda_{1}^{}$ $ \geq$ $ \lambda_{2}^{}$ $ \geq$ ...$ \lambda_{m}^{}$ > 0. Autrement dit les lignes de B sont les sommes partielles des lignes de A : B[j, k] = $ \sum_{{m=0}}^{k}$A[j, m] donc

    B[j, k] = B[j - k, k] + B[j, k - 1]

    On a donc p(j) = B[j, j].
    On tape :
    partition(n):={
      local B,j,k,m,S;
      B:=idn(n+1);
      pour k de 1 jusque n faire
        B[0,k]:=1;
      fpour;
      pour j de 1 jusque n faire
        pour k de 1 jusque j faire
          B[j,k]:=B[j-k,k]+B[j,k-1];
        fpour;
        pour k de j+1 jusque n faire
          B[j,k]:=B[j,j];
        fpour;
      fpour;
      retourne B;
    }
    :;
    
    On tape : B:=partition(10)
    On obtient :

    $\displaystyle \left(\vphantom{\begin{array}{ccccccccccc}
1 & 1 & 1 & 1 & 1 & 1 ...
...& 30 \\
0 & 1 & 6 & 14 & 23 & 30 & 35 & 38 & 40 & 41 & 42
\end{array}}\right.$$\displaystyle \begin{array}{ccccccccccc}
1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1 ...
...29 & 30 & 30 \\
0 & 1 & 6 & 14 & 23 & 30 & 35 & 38 & 40 & 41 & 42
\end{array}$$\displaystyle \left.\vphantom{\begin{array}{ccccccccccc}
1 & 1 & 1 & 1 & 1 & 1 ...
...& 30 \\
0 & 1 & 6 & 14 & 23 & 30 & 35 & 38 & 40 & 41 & 42
\end{array}}\right)$

    On remarquera que l'on retrouve la matrice A dans les diagonales montantes de la matrice B.
    On tape : tran(B)[10]
    ou on tape : col(B,10)
    On obtient : [1,1,2,3,5,7,11,15,22,30,42] ou on tape : B[j,10]$(j=0..10)
    On obtient : 1,1,2,3,5,7,11,15,22,30,42 On tape : B:=partition(1000):;
    On obtient (Evaluation time: 972.05) enfin le résultat...
    On tape : B[200,1000]
    On obtient 3972999029388
    On tape : B[1000,1000]
    On obtient 24061467864032622473692149727991
    Remarque On peut aussi pour avoir une relation de récurrence considérer les les partitions P(n, p) de n en une somme d'exactement p éléments $ \lambda_{1}^{}$ $ \geq$ ... $ \geq$ $ \lambda_{p}^{}$>0. On dit alors :
    P(n, p) =(nombre de partage de n tels que $ \lambda_{p}^{}$ = 1)+(nombre de partage de n tels que $ \lambda_{p}^{}$ > 1.
    On a :
    (nombre de partage de n tels que $ \lambda_{p}^{}$ = 1)=(nombre de partage de n - 1 en p - 1 $ \lambda_{j}^{}$)= P(n - 1, p - 1)
    (nombre de partage de n tels que $ \lambda_{p}^{}$ > 1(nombre de partage de n - p en p $ \lambda_{j}^{}$)=P(n - p, p)

    P(n, p) : = P(n - 1, p - 1) + P(n - p, p)

    avec P(n, 0) = 0, P(n, n) = 1 et P(n, p) = 0 si p > n
    On tape et on renvoie la somme des lignes de P :
    partage(n):={
      local P,j,k,m,S;
      P:=idn(n+1);
      pour k de 1 jusque n faire
        P[k,0]:=0;
      fpour;
      pour j de 1 jusque n faire
        pour k de 1 jusque j faire
          P[j,k]:=P[j-1,k-1]+P[j-k,k];
        fpour;
      fpour;
      S:=[];
      pour k de 1 jusque n faire
        S[k]:=sum(row(P,k));
      fpour;
      retourne S;
    }:;
    
    On tape : P:=partage(1000):;
    On obtient (Evaluation time: 455.81) enfin le résultat...mais c'est deux fois plus rapide qu'avec B:=partition(1000):;
    On tape : P[200]
    On obtient 3972999029388
    On tape : P[1000]
    On obtient 24061467864032622473692149727991

    relation entre P et A :
    On a :
    P[n, p] = P[n - 1, p - 1] + P[n - p, p]
    P[n - 1, p - 1] = P[n - 2, p - 2] + P[n - p, p - 1]....
    donc

    P[n, p] = P[n - p, 0] + $\displaystyle \sum_{{j=1}}^{p}$P[n - p, j]

    avec P[n, 0] = 0, P[n, n] = 1 et P[n, p] = 0 si p > n
    Si on compare avec les relations obtenus pour A:

    A[n, k] = $\displaystyle \sum_{{j=1}}^{k}$A[n - k, j] et

    A[n, n] = 1 et A[n, 0] = 0 si n > 0

    On a les mêmes relations de récurrence, donc :

    P[n, p] = A[n, p]

    Représentation de Young
    On peut voir facilement cette égalité, grâce à la repésentation de Young qui repésente par exemple le partage :
    20=7+3+3+2+1+1+1+1+1
    par le tableau formé par 20 carrés disposés selon 9 lignes :
    7 carrés sur la 1-ière ligne,
    3 carrés sur la 2-ième ligne,
    3 carrés sur la 3-ième ligne,
    2 carrés sur la 4-ième ligne,
    1 carré sur de la 5-ième jusqu'à la 9-ième ligne :

    $\displaystyle \left[\vphantom{\begin{array}{ccccccc}
\Box & \Box & \Box & \Box ...
...ox & & & & & & \\
\Box & & & & & & \\
\Box & & & & & &
\end{array}}\right.$$\displaystyle \begin{array}{ccccccc}
\Box & \Box & \Box & \Box & \Box & \Box & ...
... \\
\Box & & & & & & \\
\Box & & & & & & \\
\Box & & & & & &
\end{array}$$\displaystyle \left.\vphantom{\begin{array}{ccccccc}
\Box & \Box & \Box & \Box ...
...ox & & & & & & \\
\Box & & & & & & \\
\Box & & & & & &
\end{array}}\right]$

    Le nombre p de lignes correspond a un partage en une somme de p éléments et le plus grand élément m de ce partage est le nombre d'éléments de la première ligne.
    Si maintenant on échange les lignes et les colonnes (on prend le transposé de ce tableau) on obtient une transformation qui au partage :
    20=7+3+3+2+1+1+1+1+1 en une somme de 9 termes ayant comme plus grand élément 7 fait correspondre le partage :
    20=9+4+3+1+1+1+1 en une somme de 7 termes ayant comme plus grand élément 9 :

    $\displaystyle \left[\vphantom{\begin{array}{ccccccccc}
\Box & \Box & \Box & \Bo...
...& & & & &\\
\Box & & & & & & & &\\
\Box & & & & & & & &
\end{array}}\right.$$\displaystyle \begin{array}{ccccccccc}
\Box & \Box & \Box & \Box & \Box & \Box ...
...x & & & & & & & &\\
\Box & & & & & & & &\\
\Box & & & & & & & &
\end{array}$$\displaystyle \left.\vphantom{\begin{array}{ccccccccc}
\Box & \Box & \Box & \Bo...
...& & & & &\\
\Box & & & & & & & &\\
\Box & & & & & & & &
\end{array}}\right]$

  3. Notations
    1 sera noté 11, 1+1 sera noté 21, 1+1+1 sera noté 31 etc...
    2 sera noté 22, 2+2 sera noté 42, 2+2+2 sera noté 62 etc...
    Le développement en série de ;
    $ {\frac{{1}}{{1-x^1}}}$ sera noté 1 + x11 + x21 + ... + xn1 + ...
    $ {\frac{{1}}{{1-x^2}}}$ sera noté 1 + x22 + x42 + ... + x2n2 + ...
    $ {\frac{{1}}{{1-x^3}}}$ sera noté 1 + x33 + x63 + ... + x3n3 + ...
    .....
    $ {\frac{{1}}{{1-x^p}}}$ sera noté 1 + xpp + x2pp + ... + xpnp + ...
    Lorsque l'on fait le produit de ces développements en série le terme en xj a pour coefficient p(j) car :
    xj = xj1 = x(j-2)1x22 = x(j-4)1x42 ...
    xj = x(j-2)j-2x21 = x(j-2)j-2x22 = x(j-1)j-1x11 = xjj

    On tape : P:=truncate(product([(1-x^j)$(j=1..20)]),20)
    On obtient : -x^15-x^12+x^7+x^5-x^2-x+1
    On tape : A:=truncate(series(1/P,x=0,20),20)
    On obtient :
    627*x^20+490*x^19+385*x^18+297*x^17+231*x^16+176*x^15+ 135*x^14+101*x^13+77*x^12+56*x^11+42*x^10+30*x^9+22*x^8+ 15*x^7+11*x^6+7*x^5+5*x^4+3*x^3+2*x^2+x+1
    On tape :symb2poly(A)
    ou on tape : coeff(A,x)
    On obtient la liste p(20), p(19),.., p(1), p(0):
    [627,490,385,297,231,176,135,101,77,56,42,30,22,15,11, 7,5,3,2,1,1]
    On tape :lcoeff(A)
    On obtient p(20): 627

  4. On tape mais cela n'est pas très efficace lorsque n est grand :
    partitioner(n):={
    local A,P;
    P:=truncate(product([(1-x^j)$(j=1..n)]),n);
    A:=truncate(series(1/P,x=0,n),n);
    return revlist(symb2poly(A));
    }:;
    
    On tape : partitioner(20)
    On obtient la liste p(20), p(19),.., p(1), p(0) :
    [627,490,385,297,231,176,135,101,77,56,42,30,22,15,11, 7,5,3,2,1,1]

next up previous contents index
suivant: Une méthode plus rapide monter: Fonction partage ou nombre précédent: L'énoncé   Table des matières   Index
Documentation de giac écrite par Renée De Graeve