Les suites de Kuzrassi

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 20 Jan 2015, 18:46

Extrait de ta liste des 24k+5 et 96k+5:
2405,2485. Entre ces 2 nombres consécutifs, il te manque des 24k+5.



syrac

par syrac » 20 Jan 2015, 18:54

nodjim a écrit:Extrait de ta liste des 24k+5 et 96k+5:
2405,2485. Entre ces 2 nombres consécutifs, il te manque des 24k+5.

La dernière liste de mon poste de 13h16 (ce serait bien s'ils avaient un numéro) représente tous les kuz qui manquent entre 2405 et 9685 lorsqu'on utilise tes deux formes. Il n'en manque pas un mais plus de 200 !

Donc ma question est : comment les produis-tu ?

nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 20 Jan 2015, 19:46

Tu ne sembles pas comprendre ce que je veux dire: Dans ta liste de 13h16 des nombres de la forme 24k+5 et 96k+5, il n'est pas normal de n'avoir pas de nombres 24k+5 entre 2405 et 2485. Il manque 2429, 2453, 2477. S'il en manque 3 ici, je suppose qu'il y a un problème dans ton algorithme et que donc il en manque sûrement d'autres !

syrac

par syrac » 20 Jan 2015, 21:02

Je vois. En fait, la valeur de k, dans 24k+5, est très élevée. Par exemple, pour 14477 on a k = (14477 - 5)/24 = 603. Je les avais produits avec tes deux formes jusque k = 149, ce qui était insuffisant. L'algorithme que j'utilise pour produire les kuz n'utilise pas ce genre de variable, si bien que pour atteindre 14477 je dois, soit étudier tous les entiers impairs non divisibles par 3 dans la plage 14001 ... 14499, par exemple, soit constituer la liste entière de 1 à 14499.

Il n'y a aucun problème avec cet algorithme ; il renvoie la liste des kuz dans la plage d'entiers donnée sans possibilité d'en rater un.

Reste à savoir à quoi servent les kuz...

syrac

par syrac » 21 Jan 2015, 18:11

Je crois que je tiens une piste intéressante. La variable listekuz contient les 46 premiers kuz :

listekuz = {5, 9, 53, 77, 85, 101, 125, 149, 173, 181, 197, 221, 245, 269, 277, 293, 317, 341, 365, 373, 389, 413, 437, 461, 469, 485, 509, 533, 557, 565, 581, 05, 629, 653, 661, 677, 701, 725, 749, 757, 773, 797, 821, 845, 853, 869}

Ces entiers peuvent se calculer par récurrence. Pour preuve, si j'applique la fonction FindLinearRecurrence[listekuz] de Mathematica j'obtiens la liste de 6 coefficients {1, 0, 0, 0, 1, -1}.

Maintenant je peux produire la liste des, disons, 30 premiers kuz. Comme la longueur des deux listes en argument doit être égale, je place dans la seconde les 6 premiers kuz :

LinearRecurrence[{1, 0, 0, 0, 1, -1}, {5, 29, 53, 77, 85, 101}, 30] = {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, 485, 509, 533, 557, 565}.

On voit qu'ils y sont tous. Je peux bien entendu remplacer 30 par tout entier n pour générer la liste exacte des n premiers kuz. Ça fonctionne tout aussi bien si le second argument contient la liste des 6 kuz suivants, de 125 à 221, sauf qu'on n'obtiendra pas les 6 premiers. En fait ça fonctionne avec n'importe quel groupe de 6 kuz à partir du premier.

Je peux facilement calculer le 123ème kuz, il suffit de ne retenir que le dernier de la liste :

Last[LinearRecurrence[{1, 0, 0, 0, 1, -1}, {5, 29, 53, 77, 85, 101}, 123]] = 2357

C'est assez fabuleux de constater que pour calculer tous les kuz il suffit de connaître les 6 premiers !

Pour savoir comment Mathematica calcule la valeur de chaque kuz, et puisqu'il excelle en calcul symbolique, on remplace la deuxième liste par des lettres :

LinearRecurrence[{1, 0, 0, 0, 1, -1}, {a, b, c, d, e, f}, 35], ce qui renvoie

{a, b, c, d, e, f, -a+b+f, -a+c+f, -a+d+f, -a+e+f, 2 f-a, -2 a+b+2 f, -2 a+c+2 f, -2 a+d+2 f, -2 a+e+2 f, 3 f-2 a, -3 a+b+3 f, -3 a+c+3 f, -3 a+d+3 f, -3 a+e+3 f, 4 f-3 a, -4 a+b+4 f, -4 a+c+4 f, -4 a+d+4 f, -4 a+e+4 f, 5 f-4 a, -5 a+b+5 f, -5 a+c+5 f, -5 a+d+5 f, -5 a+e+5 f, 6 f- 5 a, -6 a+b+6 f, -6 a+c+6 f, -6 a+d+6 f, -6 a+e+6 f}

En omettant les 6 premiers termes on se retrouve avec des groupes de 5 expressions :

groupe 1 -> -a+b+f, -a+c+f, , -a+d+f, -a+e+f, -a+f+f
groupe 2 -> -2 a+b+2 f, -2 a+c+2 f, -2 a+d+2 f, -2 a+e+2 f, -2 a+f+2 f
groupe 3 -> -3 a+b+3 f, -3 a+c+3 f, -3 a+d+3 f, -3 a+e+3 f, -3 a+f+3 f
groupe 4 -> -4 a+b+4 f, -4 a+c+4 f, -4 a+d+4 f, -4 a+e+4 f, -4 a+f+4 f
groupe 5 -> -5 a+b+5 f, -5 a+c+5 f, -5 a+d+5 f, -5 a+e+5 f, - 5 a+f+5 f
etc.

On peut simplifier ces expressions en remplaçant a et f par leur valeur numérique et le numéro du groupe par g. On a alors :

groupe g -> 96g+b, 96g+c, 96g+d, 96g+e, 96g+f

Par exemple, le 3ème groupe de 5 kuz contient les termes 288+29, 288+53, 288+77, 288+85, 288+101 = 317, 341, 365, 373, 389.

On n'a plus besoin des 6 premiers termes de la liste des kuz, dont la valeur doit de toute façon être connue. Le rang d'un kuz dans la liste originelle se retrouve du coup décalé de 6 rangs vers la gauche. Le 11ème kuz, par exemple, devient le 5ème. Ne reste plus qu'une liste d'entiers répartis en groupes de 5.

Question : comment obtenir l'expression littérale du 19ème kuz (qui est maintenant le 13ème), voire sa valeur numérique ? Quelqu'un a-t-il une idée ?

nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 21 Jan 2015, 18:58

Soit à connaitre la valeur du kième kuz.
2 formules:
24(3+4([k/5]-1))+13 si k divisible par 5.
24(3+4([k/5]-1)+reste(k/5))+5 si k non divisible par 5.
ou [k/5] est la partie entière de k/5.
Sauf erreur.

syrac

par syrac » 21 Jan 2015, 21:00

Merci pour cette précision, mais même si ces expressions fonctionnent, et comme tu l'as sans doute remarqué, je n'aime pas les si. Je préfère une formule qui prend en compte tous les nombres. Si je m'acharne à trouver une seule forme (ou formule) ce n'est pas pour me satisfaire d'une dichotomie "divisible par 5" et "non divisible par 5".

Est-ce que tu t'y connais en suites récurrentes linéaires ? Je ne comprends pas la signification de la liste de coefficients {1, 0, 0, 0, 1, -1}, et la doc de Mathematica est totalement silencieuse à ce sujet. Le Net aussi d'ailleurs. J'aimerais savoir quelle transformation récurrente opère Mathematica à un terme pour produire le suivant (c-a-d comment il produit les -3 a+d+3 f et consorts).

nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 22 Jan 2015, 15:22

Quelque chose comme ça peut être.
24(3+4([k/5]-1)+reste(k/5))+5(1-[1-(k/5)+[k/5]])+13[1-(k/5)+[k/5]]

A tester bien sûr.

syrac

par syrac » 22 Jan 2015, 18:01

Ce serait possible de la tester si tu expliquais la différence en (k+5) et [k+5]. Je suppose par ailleurs que reste(k/5) = k mod 5.

nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 22 Jan 2015, 18:20

[k/5] est la partie entière de (k/5).
reste(k/5) est bien k mod 5.

syrac

par syrac » 22 Jan 2015, 18:38

Si ce qui suit est une bonne interprétation de ta formule, alors non, elle ne fonctionne pas :

m = k mod 5
e = (k-m)/5
24 (3 + 4 e - 1) + m + 5 (1 - (1 - e + m)) + 13 (1 - e + m)

syrac

par syrac » 22 Jan 2015, 18:42

Ceci dit, k mod 5 est une bonne piste, comme je te le montrerai dans quelques minutes.

nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 22 Jan 2015, 18:53

Je ne crois qu'il y ait équivalence entre [k/5] et (k-m)/5.
D'autre part ce serait 24(3+4e-1+m)+...

syrac

par syrac » 22 Jan 2015, 19:04

Non, même avec 24(3+4e-1+m) ça ne fonctionne pas. Je poste ci-après une solution qui fonctionne.

syrac

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. L’indice 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 l’exemple 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 qu’on 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

nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 22 Jan 2015, 20:45

Je ne suis pas très familiarisé avec Mathématica...
Sinon, cette formule semble bien marcher:

24[4k/5]+5(1-[1-k/5+[k/5]])-11[1-k/5+[k/5]]

Moi aussi, j'ai dû passer par -11 plutôt que +13.

syrac

par syrac » 24 Jan 2015, 00:03

Pour continuer mon précédent post, dans lequel je montrais comment calculer la valeur du kuz k de rang r, voici maintenant comment calculer le rang d'un kuz de valeur donnée. Du moins dans son principe, car sans l'utilisation d'un ordinateur ça risque d'être assez fastidieux.

Pour simplifier j'appellerai S la liste que j'appelais somepart dans mon post précédent, dans lequel je disais que pour trouver le kuz dont le rang r est connu il fallait commencer par calculer m = r mod 5, qui est toujours égal à 0, 1, 2, 3 ou 4.

S = {-11, 5, 29, 53, 77} est le nombre à ajouter au résultat du calcul de k, le kuz de rang r, selon que m est égal à {0, 1, 2, 3, 4}, dans le même ordre.

Prenons l'exemple de k = 317, dont on recherche le rang. On ne peut pas connaître la valeur de m = r mod 5 puisque par définition on ne connait pas r. Pour connaitre m on calcule donc (317-S)/96, ce qui donne {41/12, 13/4, 3, 11/4, 5/2}. La valeur entière, 3, égale à (317-29)/96, est à l'indice 2 dans la liste {0, 1, 2, 3, 4} (qui commence par l'indice 0), ce qui nous permet de conclure que m = 2.

Ce qui importe n'est donc pas le résultat de (k-S)/96, mais l'indice du seul entier dans, par exemple, {41/12, 13/4, 3, 11/4, 5/2}.

Connaissant m on peut maintenant calculer r, le rang de k :

m = indice du seul entier dans (k-S)/96
r = (5*(k-S[m]))/96+m

( S[m] est l'élément de S d'indice m).

Pour reprendre l'exemple de k = 317, on aura r = (5*(317-29))/96+2 = 17

Dans un langage de script (Php, javascript, ...) on écrira :

S = array(-11, 5, 29, 53, 77);
function rangkuz(k)
{
if (k%2==0 || k%3==0) return 0; /* on renvoie 0 si k est pair ou divisible par 3, ce qui ne signifie pas pour autant que k est bien un kuz */
for (m=0; m<5; m++)
{
if (is_int((k-S[m])/96)) break;
}
return (5*(k-S[m]))/96+m
}

Si k n'est pas un kuz cette fonction renverra (5*(k-77))/96+4, c'est-à-dire n'importe quoi. Il vaut donc mieux s'assurer que k est bien un kuz avant de l'appeler.

PS : dans Mathematica il faudra écrire r = (5(k-S[m]))/96+m-1, toujours pour la raison que le premier élément d'une liste (ou tableau, ou vecteur) y possède l'indice 1 et non 0.

nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 24 Jan 2015, 17:15

La formule [5(k-5)/96]+1 semble correcte.
[] désignant la partie entière.

syrac

par syrac » 24 Jan 2015, 19:18

Oui, bien vu, c'est assez étonnant mais ça marche ! :lol3:

J'ai calculé le rang des 200 premiers kuz, ce qui donne une liste des entiers de 1 à 200.

Mais dis-donc, as-tu la preuve que ça marche pour tous les kuz ? :ptdr:

nodjim
Membre Complexe
Messages: 3241
Enregistré le: 24 Avr 2009, 16:35

par nodjim » 24 Jan 2015, 19:30

Et celle ci l'a valides tu ? le kième kuz:
24[4k/5]+5(1-[1-k/5+[k/5]])-11[1-k/5+[k/5]]
Après l'échec de la 1ère formule, je crois que celle là marche bien.

Oui, on peut le démontrer.

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite