par syrac » 22 Jan 2015, 19:05
Voici une méthode extrêmement simple pour calculer le kuz de rang r. Elle se fonde sur les kuz dont le rang est divisible par 5 :
5, 29, 53, 77, 85, 101, 125, 149, 173, 181, 197, 221, 245, 269, 277, 293, 317, 341, 365, 373, 389,
La différence entre eux est constante et égale à 96. Quant à la différence entre les termes séparant deux de ces kuz, elle forme une suite qui se répète : 16, 24, 24, 24, 8
85__16__101__24__125__24__ 149__24__173__8__181
Soit r0, r1, r2, r3, r4, le rang des 5 kuz consécutifs k0, k1, k2, k3, k4, tels que r0 soit divisible par 5. Lindice des r et des k est égal à r mod 5, et tout rang ri-(ri mod 5) est divisible par 5. Posons m = ri mod 5. Le nombre (ri-m)/5 représente le nombre de groupes de 5 kuz consécutifs qui précèdent celui dont le premier terme est de rang r0.
Exemple : le groupe 277, 293, 317, 341, 365, de rangs 15, 16, 17, 18, 19, est précédé de (15-0)/5 = 3 groupes, et (15-0)/5 = (16-1)/5
= (19-4)/5. Si le premier groupe était de longueur 96 on en déduirait que le kuz de rang 15 est égal à 96*3 = 288. Mais la longueur du premier groupe de 5 kuz est égale non pas à 96 mais à 85. Il faut donc systématiquement soustraire 11 du résultat, ce qui donne pour valeur au kuz k0 de rang r0 divisible par 5 :
m = r0 mod 5
k0 = 96*(r0-m)/5-11
Occupons-nous maintenant des kuz de rang r1, r2, r3 et r4. La valeur de m sera pour ce qui les concerne égale à 1, 2, 3 ou 4. Pour obtenir la valeur des kuz k1, k2, k3 et k4 il faudra ajouter à K0 les valeurs cumulées de 16, 24, 24, 24, soit 16, 40, 64 ou 88. Pour reprendre lexemple de k0 = 277, on aura k1 = 277+16 = 293, k2 = 277+40 = 317, k3 = 277+64 = 341, et k4 = 277+88 = 365. Dans le cas de k0 on ajoute 0, si bien quon a maintenant :
sompart = {0, 16, 40, 64, 88}
m = r mod 5
k(r) = 96*(r-m)/5-11+sompart(m)
On peut faire léconomie de la soustraction de 11 en soustrayant ce nombre de sompart, qui devient sompart = { -11, 5, 29, 53, 77}. On remarque que les 4 derniers termes de sompart sont les 4 premiers kuz.
Dans un langage de script on pourra écrire la fonction valkuz(r) pour connaître la valeur du kuz k de rang r :
sompart = array(-11, 5, 29, 53, 77);
function valkuz(r)
{
m = r % 5;
return 96*(r-m)/5+sompart[m]
}
Sous Mathematica on écrira : valkuz[r_] := (m = Mod[r, 5]; 96 (r-m)/5 + Part[{-11, 5, 29, 53, 77}, m+1]); <- m+1 parce que le premier élément, -11, possède l'indice 1 et non pas 0.
On peut calculer par exemple les 20 premiers kuz en écrivant, sous Mathematica, Table[valkuz[r], {r,1,20}] (ou pour les inconditionnels des pures fonctions, valkuz[#]& /@ Range[20]), qui renvoie :
{5, 29, 53, 77, 85, 101, 125, 149, 173, 181, 197, 221, 245, 269, 277, 293, 317, 341, 365, 373}
PS : je reviens sur cette phrase : "On remarque que les 4 derniers termes de sompart sont les 4 premiers kuz". Voici la liste des différences entre les kuz :
24, 24, 24, 8, 16, 24, 24, 24, 8, 16, 24, 24, 24, 8, 16, 24, 24, 24, 8, 16, 24, 24, 24, 8, 16, 24, 24, 24, 8, 16, ...
On retire les 4 premières pour que la liste débute par 16 :
16, 24, 24, 24, 8, 16, 24, 24, 24, 8, 16, 24, 24, 24, 8, 16, 24, 24, 24, 8, 16, 24, 24, 24, 8, ...
On calcule les valeurs cumulées :
16, 40, 64, 88, 96, 112, 136, 160, 184, 192, 208, 232, 256, 280, 288, 304, 328, 352, 376, 384, 400, 424, 448, 472, 480
Et quand on soustrait 11 on obtient ... la liste des kuz ! :we:
5, 29, 53, 77, 85, 101, 125, 149, 173, 181, 197, 221, 245, 269, 277, 293, 317, 341, 365, 373, 389, 413, 437, 461, 469