next up previous contents index
suivant: Estimation asymptotique monter: Fonction partage ou nombre précédent: La solution   Table des matières   Index

Une méthode plus rapide

On utilise le théorème du nombre pentagonal d'Euler. Ce théorème donne une relation de récurrence entre p(n) et p(j) pour j < n avec la convention que p(j) = 0 lorsque j < 0, p(0) = 1. Cette relation est :

p(n) = p(n - 1) + p(n - 2) - p(n - 5) - p(n - 7) + p(n - 12) + p(n - 15) - p(n - 22) - p(n - 26)....

p(n) = $\displaystyle \sum_{{m>0}}^{}$(- 1)m+1p(n - m(3m - 1)/2 + (- 1)m+1p(n - m(3m + 1)/2

Les nombres m(3m - 1)/2 et m(3m + 1)/2 sont les nombres pentagonaux généralisés. On tape :
partition_euler(n):={
local sg,s1,s2,m,k,j,p;
p:=[1];
pour j de 1 jusque n faire
m:=1;
sg:=1;
s1:=0;
k:=j-m*(3*m-1)/2;
tantque k>=0 faire 
s1:=s1+sg*p[k]
sg:=-sg;
m:=m+1;
k:=j-m*(3*m-1)/2;
ftantque;
m:=1;
sg:=1;
s2:=0;
k:=j-m*(3*m+1)/2;
tantque k>=0 faire 
s2:=s2+sg*p[k]
sg:=-sg;
m:=m+1;
k:=j-m*(3*m+1)/2;
ftantque;
p[j]:=s1+s2;
fpour;
retourne p;
}:;
On tape :
partition_euler(20)
On obtient :
[1,1,2,3,5,7,11,15,22,30,42,56,77,101,135,176,231,297,385,490,627]
On tape :
P:=partition_euler(1000)
On obtient la liste après 2.77s
On tape : P[200]
On obtient 3972999029388
On tape : P[1000]
On obtient 24061467864032622473692149727991

Documentation de giac écrite par Renée De Graeve