Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#176 26-09-2019 07:05:19

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Bonjour,

Essais :

A = 34763
B = 92671
P = 3221521973

          *** Début du programme ***

P = 9664565919
  A = 104289
  B = 92671

                    *******************

Temps écoulé : 0.09 s soit : 0.0 min  0.09 s

2.

*************************************************
                *      Alignements progressif de produits       *
                *             Idée : cosinuspax                 *
                *                    v.2                        *
                *************************************************


A = 775941213935564328459698982023
B = 367860705548155112876080250069
P = 285438282422228662150088429608306813721712689335174575509587

          *** Début du programme ***

P = 285438282422228662150088429608306813721712689335174575509587
  A = 775941213935564328459698982023
  B = 367860705548155112876080250069

P = 2568944541800057959350795866474761323495414204016571179586283
  A = 34917354627100394780686454191035
  B = 367860705548155112876080250069

                    *******************

Temps écoulé : 0.06 s soit : 0.0 min  0.06 s

3.

A = 448112341766964559764297625291
B = 398553599201280303607945220797
P = 178596786657737932800833348803878901316132765258159766376927

          *** Début du programme ***

P = 6608081106336303513630833905743519348696912314551911355946299
  A = 7417688096053413063120276143866612250325
  B = 398553599201280303607945220797

                    *******************

Temps écoulé : 0.06 s soit : 0.0 min  0.06 s

4-

A = 45413
B = 3507065749624756498911323
P = 159266376887709066885059911399

          *** Début du programme ***

P = 3981659422192726672126497784975
  A = 358669858798125
  B = 3507065749624756498911323

                    *******************

Temps écoulé : 0.06 s soit : 0.0 min  0.06 s

@+

Hors ligne

#177 26-09-2019 08:20:38

LEG
Membre
Inscription : 19-09-2012
Messages : 790

Re : Alignement de produits

Bonjour
@Yoshi

pourquoi il veut tester le bloc des multiples de 9...????  puisque ce sont des multiples de 3, pas forcément toujours multiple de 9....

Hors ligne

#178 26-09-2019 08:37:50

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Salut Yoshi,

On y est presque mais : J'ai mal vu hier soir.

P = 4043119965
  A = 14235
  B = 3692347

Si P est multiplié par 15, A doit être multiplié par 15 aussi (T = 15). Donc ici A = 73 x 15 = 1095 et non 14235 (1095 x 13, pourquoi ?), et du coup le produit n'est peut-être pas encore aligné.  A mon avis c'est un problème mineur.

Dernière modification par cosinuspax (26-09-2019 08:43:39)

Hors ligne

#179 26-09-2019 08:39:40

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Non, il n'est pas aligné car A < S. Donc il faut aller le chercher plus loin.

Dernière modification par cosinuspax (26-09-2019 12:03:27)

Hors ligne

#180 26-09-2019 08:49:25

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Dans l'exemple 4 (étonnant la rapidité d'alignement compte tenu de l'écart A-B !) est-ce que A est multiplié par un multiple de 9 ? Si oui c'est pratiquement gagné.
Il faut impérativement :
1) que N et A soit multipliés par le même T.
2) que N et A soit multipliés par un multiple de 9 au-delà de V = 51.

Dernière modification par cosinuspax (26-09-2019 08:54:03)

Hors ligne

#181 26-09-2019 09:20:43

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

RE,

Exemple 4
A est-il multiplié par un multiple de 9 ? oui
* pas besoin de moi, ni d'ordi: A=358669858798125 --> 3+5+8+6+6+9+8+5+8+7+9+8+1+2+5 = 90

N et A ont-ils été multipliés par le même T ?
T=25 (V=25)
--> A=358669858798125 oui multiple de 25
* pas besoin de moi, ni d'ordi : 358669858798125
--> P = 3981659422192726672126497784975  oui multiple de 25
* pas besoin de moi, ni d'ordi : 3981659422192726672126497784975

N et A ont-ils été multipliés par un multiple de 9 ?
A : déjà répondu
P = 3981659422192726672126497784975  P modulo 9 = 7.   Non
    Normal on s'est arrêté sur A=A*25, donc sur P=N*25
    On avait $N\equiv 1\quad [9]$
    $1 \times  25 =25$ et  $25\equiv 7\quad [9]$
 
@+

Hors ligne

#182 26-09-2019 12:25:15

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Exemple 4. Si T = 25, A ne peut pas être égal à : 358669858798125 mais à : 45413 x 25 = 1135325.
La preuve est que A x B ne donne pas P mais un nombre beaucoup plus grand (A x T x B doit toujours donner T x N).
Pour reprendre cet exemple (4), il y a de fortes chances à parier qu'il est aligné beaucoup plus loin (rappelle-toi l'essai avec l'ancien code : M = 31 millions).

Dernière modification par cosinuspax (27-09-2019 08:49:31)

Hors ligne

#183 26-09-2019 12:34:28

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Pour l'instant donc, seul le produit 29 x 71 fonctionne avec T = 3.

A x T x B = N x T

29 x 3 x 71 = 2059 x 3 = 6177.

C'est pareil pour tous les produits alignés jusqu'à l'infini.

Dernière modification par cosinuspax (26-09-2019 12:41:17)

Hors ligne

#184 26-09-2019 12:51:19

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

J'ai mis un retour i après la ligne 10. Pour vérif si on a bien tous les T à la suite, avant T = 49 et après.

Hors ligne

#185 26-09-2019 13:18:13

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,


Post #178, cosinuspax a écrit :

Si P est multiplié par 15, A doit être multiplié par 15 aussi (T = 15). Donc ici A = 73 x 15 = 1095 et non 14235 (1095 x 13, pourquoi ?), et du coup le produit n'est peut-être pas encore aligné.  A mon avis c'est un problème mineur.

Il n'a pas été calculé 1095 x 13, mais 949 x 15.
Pourquoi , tout est expliqué dans le post #173 et pas la peine de refaire les calculs, à la main, ils sont juste !

Donc, je vais recommencer...
Ton code quitte la ligne 13 avec les résultats suivants :
e=-1 ;  A=73  ; V=13  ; T=13  ; P = 3504037303  ;  L = 3503988830  ;  R =59194  Et donc L<P


14 L > P ? non.  On passe à la ligne suivante
15 L < P ? oui. D'où S =P-L=48473. Et passe ligne suivante
16 P = N ? (non) . On passe on arrive ligne 17 et tu n'as jamais apporté de réponse à mon questionnement :
17 Sinon... Le Sinon fait référence à qui ?
    *  Sinon si la condition posée en ligne 16 n'est pas vérifiée
    *  Sinon si $ P\neq N$

Je te remontre que moi, j'ai opté pour :
Si P=N alors :
        SI P>S^2 alors :
                Si A>=S ET B>=S alors :
                        print P, A,B stop
                SINON Si A<S OU B<S  alors :
                        Next i
                FIN SI
         FIN SI
FIN SI

Ce que tu peux lire dans le code Python fourni... Ah oui, c'est vrai Python, c'est du chinois !
Ce que tu comprendre avec le code indenté ci dessus et avec des couleurs correspondantes et des FIN SI ajoutés pour délimiter les blocs.
Ah oui, c'est vrai, l'indentation te donne du mal...

Donc je reprends à la ligne 17
17 P=N ? Non
Donc, avec mon interprétation, je saute au FIN SI rouge, je sors du bloc et j'arrive à ta ligne 18
18 A=A * T = 73 * 13 = 949
19 P > S^2 (oui) A >=S (non : 979 <48473) ET  B>=S (oui) ? NON ! On passe ligne suivante
20 A < S (oui)  OU  B < S (on) ? Réponse Oui puisque c'est OU --> Next i

On refait mes calculs et on arrive en ligne 14 nanti des résultats suivants :
e=-1 ;  A=949  ; V=15  ; T=15  ; P = 4043119965  ;  L = 4043115810  ;  R = 63585  Et donc L<P
donc :
14 L> P ? Non.
15 L<P  ? Oui. S =P-L = 4155
16 P=N  ? Non Avec mon interprétation je saute ligne 18

18 A=A* T = 949 * 15 = 14125
19 P> s^2 (oui) A>=S (oui)  ET  B>=S (oui) ? Réponse Oui ---> On écrit P, A et B et  Arrêt.
Pas de faute de logique, sauf si mon interprétation du Sinon dans le bloc  SI... FIN SI rouge est erronée.
Mais je ne peux pas savoir, sans réponse de ta part sur le sujet...

@+

[EDIT]
J'entrevois que tu fais une modif...
Mais si quelque chose ne te paraît pas correct (cf post 178) ça sert à quoi ?
Je me concentre d'abord sur le post #178.
Je te montre que tout est correct sauf si mon interprétation de ta ligne 17 est fausse :
maintenant si tu veux qu'on avance, il va bien falloir que tu répondes...
Je vais tester ta modif et te communiquerais le résultat lorsque j'aurai ma réponse.

Hors ligne

#186 26-09-2019 13:22:38

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Je la retire. On verra ça plus tard.

Hors ligne

#187 26-09-2019 13:25:51

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Input A
A0 = A
Input B

1 N = A x B
2 P = N
3 V = 1
4 e = - 1
5 i = i + 1 (i = 0)
6 Si i > 1, alors V = V + 2
7 Si e = - 1, alors T = V
8 Si V = 51, alors e = e + 1 et V = 7
9 Si e > - 1 et si V = 7, alors T = 51 x 9^e
10 Si T > 49 x 9^e, alors T = 9 x (9^e x V)
11 Si i > 1, alors P = N x T

12 R = sqrt entière de P
13 L = R^2 + R
14 Si L > P, alors aller à next i.
15 Si L < P, alors S = P - L
16 Si P = N, alors si P > S^2, si A >=S, si B > S, print P, A et B. STOP.
17 Sinon, si A ou B < S, alors aller à next i.

18 A = A0 x T
19 Si P > S^2, si A >= S, si B >= S, alors print P, A et B. STOP.
20 Si A ou B < S, alors aller à next i.

Dernière modification par cosinuspax (26-09-2019 18:27:57)

Hors ligne

#188 26-09-2019 13:37:09

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Eh bien SINON c'est à dire si on a pas la condition en ligne 16.

Si P=N alors :
        SI P>S^2 alors :
                Si A>=S ET B>=S alors :
                        print P, A,B stop
                SINON Si A<S OU B<S  alors :
                        Next i
                FIN SI
         FIN SI
FIN SI

C'est évidemment ça, pourquoi ce serait autre chose ?

Ce qui se passe est très simple. Le programme conserve la valeur du A x T précédent. Il recalcule un nouveau P qui est correct mais tient compte du A x T précédent qui est toujours en mémoire. Quel ballot ! (c'est moi).
J'arrange ça tantôt.

Dernière modification par cosinuspax (26-09-2019 13:38:47)

Hors ligne

#189 26-09-2019 13:47:11

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Réparation ligne 20.

Hors ligne

#190 26-09-2019 15:16:24

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,

Voilà, avec les tests en prime :
Essai 1 :


                *************************************************
                *      Alignements progressif de produits       *
                *             Idée : cosinuspax                 *
                *                    v.2                        *
                *************************************************


          *** Début du programme ***
A = 73
B = 3692347
P = 269541331

i = 1   e = -1   V = 1   T = 1
i = 2   e = -1   V = 3   T = 3
i = 3   e = -1   V = 5   T = 5
i = 4   e = -1   V = 7   T = 7
i = 5   e = -1   V = 9   T = 9
i = 6   e = -1   V = 11   T = 11
i = 7   e = -1   V = 13   T = 13
i = 8   e = -1   V = 15   T = 15
i = 9   e = -1   V = 17   T = 17
i = 10   e = -1   V = 19   T = 19
i = 11   e = -1   V = 21   T = 21
i = 12   e = -1   V = 23   T = 23
i = 13   e = -1   V = 25   T = 25
i = 14   e = -1   V = 27   T = 27
i = 15   e = -1   V = 29   T = 29
i = 16   e = -1   V = 31   T = 31
i = 17   e = -1   V = 33   T = 33
i = 18   e = -1   V = 35   T = 35
P = 9433946585
  A = 2555
  B = 3692347

                    *******************

 Temps écoulé : 0.39 s soit : 0.0 min  0.39 s

>>> N*T
9433946585
>>> A0*T*B
9433946585
>>>

Essai 2

                *************************************************
                *      Alignements progressif de produits       *
                *             Idée : cosinuspax                 *
                *                    v.2                        *
                *************************************************


          *** Début du programme ***
A = 45413
B = 3507065749624756498911323
P = 159266376887709066885059911399

i = 1   e = -1   V = 1   T = 1
i = 2   e = -1   V = 3   T = 3
i = 3   e = -1   V = 5   T = 5
i = 4   e = -1   V = 7   T = 7
i = 5   e = -1   V = 9   T = 9
i = 6   e = -1   V = 11   T = 11
i = 7   e = -1   V = 13   T = 13
i = 8   e = -1   V = 15   T = 15
i = 9   e = -1   V = 17   T = 17
i = 10   e = -1   V = 19   T = 19
i = 11   e = -1   V = 21   T = 21
i = 12   e = -1   V = 23   T = 23
i = 13   e = -1   V = 25   T = 25
i = 14   e = -1   V = 27   T = 27
i = 15   e = -1   V = 29   T = 29
i = 16   e = -1   V = 31   T = 31
i = 17   e = -1   V = 33   T = 33
i = 18   e = -1   V = 35   T = 35
i = 19   e = -1   V = 37   T = 37
i = 20   e = -1   V = 39   T = 39
i = 21   e = -1   V = 41   T = 41
i = 22   e = -1   V = 43   T = 43
i = 23   e = -1   V = 45   T = 45
i = 24   e = -1   V = 47   T = 47
i = 25   e = -1   V = 49   T = 49
i = 26   e = 0   V = 7   T = 63
i = 27   e = 0   V = 9   T = 81
i = 28   e = 0   V = 11   T = 99
i = 29   e = 0   V = 13   T = 117
i = 30   e = 0   V = 15   T = 135
i = 31   e = 0   V = 17   T = 153
i = 32   e = 0   V = 19   T = 171
i = 33   e = 0   V = 21   T = 189
i = 34   e = 0   V = 23   T = 207
i = 35   e = 0   V = 25   T = 225
i = 36   e = 0   V = 27   T = 243
i = 37   e = 0   V = 29   T = 261
i = 38   e = 0   V = 31   T = 279
i = 39   e = 0   V = 33   T = 297
i = 40   e = 0   V = 35   T = 315
i = 41   e = 0   V = 37   T = 333
i = 42   e = 0   V = 39   T = 351
i = 43   e = 0   V = 41   T = 369
i = 44   e = 0   V = 43   T = 387
i = 45   e = 0   V = 45   T = 405
i = 46   e = 0   V = 47   T = 423
i = 47   e = 0   V = 49   T = 441
i = 48   e = 1   V = 7   T = 567
i = 49   e = 1   V = 9   T = 729
i = 50   e = 1   V = 11   T = 891
i = 51   e = 1   V = 13   T = 1053
i = 52   e = 1   V = 15   T = 1215
i = 53   e = 1   V = 17   T = 1377
i = 54   e = 1   V = 19   T = 1539
i = 55   e = 1   V = 21   T = 1701
i = 56   e = 1   V = 23   T = 1863
i = 57   e = 1   V = 25   T = 2025
i = 58   e = 1   V = 27   T = 2187
i = 59   e = 1   V = 29   T = 2349
i = 60   e = 1   V = 31   T = 2511
i = 61   e = 1   V = 33   T = 2673
i = 62   e = 1   V = 35   T = 2835
i = 63   e = 1   V = 37   T = 2997
i = 64   e = 1   V = 39   T = 3159
i = 65   e = 1   V = 41   T = 3321
i = 66   e = 1   V = 43   T = 3483
i = 67   e = 1   V = 45   T = 3645
i = 68   e = 1   V = 47   T = 3807
i = 69   e = 1   V = 49   T = 3969
i = 70   e = 2   V = 7   T = 5103
i = 71   e = 2   V = 9   T = 6561
i = 72   e = 2   V = 11   T = 8019
i = 73   e = 2   V = 13   T = 9477
i = 74   e = 2   V = 15   T = 10935
i = 75   e = 2   V = 17   T = 12393
i = 76   e = 2   V = 19   T = 13851
i = 77   e = 2   V = 21   T = 15309
i = 78   e = 2   V = 23   T = 16767
i = 79   e = 2   V = 25   T = 18225
i = 80   e = 2   V = 27   T = 19683
i = 81   e = 2   V = 29   T = 21141
i = 82   e = 2   V = 31   T = 22599
i = 83   e = 2   V = 33   T = 24057
i = 84   e = 2   V = 35   T = 25515
i = 85   e = 2   V = 37   T = 26973
i = 86   e = 2   V = 39   T = 28431
i = 87   e = 2   V = 41   T = 29889
i = 88   e = 2   V = 43   T = 31347
i = 89   e = 2   V = 45   T = 32805
i = 90   e = 2   V = 47   T = 34263
i = 91   e = 2   V = 49   T = 35721
i = 92   e = 3   V = 7   T = 45927
i = 93   e = 3   V = 9   T = 59049
i = 94   e = 3   V = 11   T = 72171
i = 95   e = 3   V = 13   T = 85293
i = 96   e = 3   V = 15   T = 98415
i = 97   e = 3   V = 17   T = 111537
i = 98   e = 3   V = 19   T = 124659
i = 99   e = 3   V = 21   T = 137781
i = 100   e = 3   V = 23   T = 150903
i = 101   e = 3   V = 25   T = 164025
i = 102   e = 3   V = 27   T = 177147
i = 103   e = 3   V = 29   T = 190269
i = 104   e = 3   V = 31   T = 203391
i = 105   e = 3   V = 33   T = 216513
i = 106   e = 3   V = 35   T = 229635
i = 107   e = 3   V = 37   T = 242757
i = 108   e = 3   V = 39   T = 255879
i = 109   e = 3   V = 41   T = 269001
i = 110   e = 3   V = 43   T = 282123
i = 111   e = 3   V = 45   T = 295245
i = 112   e = 3   V = 47   T = 308367
i = 113   e = 3   V = 49   T = 321489
i = 114   e = 4   V = 7   T = 413343
i = 115   e = 4   V = 9   T = 531441
i = 116   e = 4   V = 11   T = 649539
i = 117   e = 4   V = 13   T = 767637
i = 118   e = 4   V = 15   T = 885735
i = 119   e = 4   V = 17   T = 1003833
i = 120   e = 4   V = 19   T = 1121931
i = 121   e = 4   V = 21   T = 1240029
i = 122   e = 4   V = 23   T = 1358127
i = 123   e = 4   V = 25   T = 1476225
i = 124   e = 4   V = 27   T = 1594323
i = 125   e = 4   V = 29   T = 1712421
i = 126   e = 4   V = 31   T = 1830519
i = 127   e = 4   V = 33   T = 1948617
i = 128   e = 4   V = 35   T = 2066715
i = 129   e = 4   V = 37   T = 2184813
i = 130   e = 4   V = 39   T = 2302911
i = 131   e = 4   V = 41   T = 2421009
i = 132   e = 4   V = 43   T = 2539107
i = 133   e = 4   V = 45   T = 2657205
i = 134   e = 4   V = 47   T = 2775303
i = 135   e = 4   V = 49   T = 2893401
i = 136   e = 5   V = 7   T = 3720087
i = 137   e = 5   V = 9   T = 4782969
i = 138   e = 5   V = 11   T = 5845851
i = 139   e = 5   V = 13   T = 6908733
i = 140   e = 5   V = 15   T = 7971615
i = 141   e = 5   V = 17   T = 9034497
i = 142   e = 5   V = 19   T = 10097379
i = 143   e = 5   V = 21   T = 11160261
i = 144   e = 5   V = 23   T = 12223143
i = 145   e = 5   V = 25   T = 13286025
i = 146   e = 5   V = 27   T = 14348907
i = 147   e = 5   V = 29   T = 15411789
i = 148   e = 5   V = 31   T = 16474671
i = 149   e = 5   V = 33   T = 17537553
i = 150   e = 5   V = 35   T = 18600435
i = 151   e = 5   V = 37   T = 19663317
i = 152   e = 5   V = 39   T = 20726199
i = 153   e = 5   V = 41   T = 21789081
i = 154   e = 5   V = 43   T = 22851963
i = 155   e = 5   V = 45   T = 23914845
i = 156   e = 5   V = 47   T = 24977727
i = 157   e = 5   V = 49   T = 26040609
i = 158   e = 6   V = 7   T = 33480783
i = 159   e = 6   V = 9   T = 43046721
i = 160   e = 6   V = 11   T = 52612659
i = 161   e = 6   V = 13   T = 62178597
i = 162   e = 6   V = 15   T = 71744535
i = 163   e = 6   V = 17   T = 81310473
i = 164   e = 6   V = 19   T = 90876411
i = 165   e = 6   V = 21   T = 100442349
i = 166   e = 6   V = 23   T = 110008287
i = 167   e = 6   V = 25   T = 119574225
i = 168   e = 6   V = 27   T = 129140163
i = 169   e = 6   V = 29   T = 138706101
i = 170   e = 6   V = 31   T = 148272039
i = 171   e = 6   V = 33   T = 157837977
i = 172   e = 6   V = 35   T = 167403915
i = 173   e = 6   V = 37   T = 176969853
i = 174   e = 6   V = 39   T = 186535791
i = 175   e = 6   V = 41   T = 196101729
i = 176   e = 6   V = 43   T = 205667667
i = 177   e = 6   V = 45   T = 215233605
i = 178   e = 6   V = 47   T = 224799543
i = 179   e = 6   V = 49   T = 234365481
i = 180   e = 7   V = 7   T = 301327047
i = 181   e = 7   V = 9   T = 387420489
i = 182   e = 7   V = 11   T = 473513931
i = 183   e = 7   V = 13   T = 559607373
i = 184   e = 7   V = 15   T = 645700815
i = 185   e = 7   V = 17   T = 731794257
i = 186   e = 7   V = 19   T = 817887699
i = 187   e = 7   V = 21   T = 903981141
i = 188   e = 7   V = 23   T = 990074583
i = 189   e = 7   V = 25   T = 1076168025
i = 190   e = 7   V = 27   T = 1162261467
i = 191   e = 7   V = 29   T = 1248354909
i = 192   e = 7   V = 31   T = 1334448351
i = 193   e = 7   V = 33   T = 1420541793
i = 194   e = 7   V = 35   T = 1506635235
i = 195   e = 7   V = 37   T = 1592728677
i = 196   e = 7   V = 39   T = 1678822119
i = 197   e = 7   V = 41   T = 1764915561
i = 198   e = 7   V = 43   T = 1851009003
i = 199   e = 7   V = 45   T = 1937102445
i = 200   e = 7   V = 47   T = 2023195887
i = 201   e = 7   V = 49   T = 2109289329
i = 202   e = 8   V = 7   T = 2711943423
i = 203   e = 8   V = 9   T = 3486784401
i = 204   e = 8   V = 11   T = 4261625379
i = 205   e = 8   V = 13   T = 5036466357
i = 206   e = 8   V = 15   T = 5811307335
i = 207   e = 8   V = 17   T = 6586148313
i = 208   e = 8   V = 19   T = 7360989291
i = 209   e = 8   V = 21   T = 8135830269
i = 210   e = 8   V = 23   T = 8910671247
i = 211   e = 8   V = 25   T = 9685512225
i = 212   e = 8   V = 27   T = 10460353203
i = 213   e = 8   V = 29   T = 11235194181
i = 214   e = 8   V = 31   T = 12010035159
i = 215   e = 8   V = 33   T = 12784876137
i = 216   e = 8   V = 35   T = 13559717115
i = 217   e = 8   V = 37   T = 14334558093
i = 218   e = 8   V = 39   T = 15109399071
i = 219   e = 8   V = 41   T = 15884240049
i = 220   e = 8   V = 43   T = 16659081027
i = 221   e = 8   V = 45   T = 17433922005
i = 222   e = 8   V = 47   T = 18208762983
i = 223   e = 8   V = 49   T = 18983603961
i = 224   e = 9   V = 7   T = 24407490807
i = 225   e = 9   V = 9   T = 31381059609
i = 226   e = 9   V = 11   T = 38354628411
i = 227   e = 9   V = 13   T = 45328197213
i = 228   e = 9   V = 15   T = 52301766015
i = 229   e = 9   V = 17   T = 59275334817
i = 230   e = 9   V = 19   T = 66248903619
i = 231   e = 9   V = 21   T = 73222472421
i = 232   e = 9   V = 23   T = 80196041223
i = 233   e = 9   V = 25   T = 87169610025
i = 234   e = 9   V = 27   T = 94143178827
i = 235   e = 9   V = 29   T = 101116747629
i = 236   e = 9   V = 31   T = 108090316431
i = 237   e = 9   V = 33   T = 115063885233
i = 238   e = 9   V = 35   T = 122037454035
i = 239   e = 9   V = 37   T = 129011022837
i = 240   e = 9   V = 39   T = 135984591639
i = 241   e = 9   V = 41   T = 142958160441
i = 242   e = 9   V = 43   T = 149931729243
i = 243   e = 9   V = 45   T = 156905298045
i = 244   e = 9   V = 47   T = 163878866847
i = 245   e = 9   V = 49   T = 170852435649
i = 246   e = 10   V = 7   T = 219667417263
i = 247   e = 10   V = 9   T = 282429536481
i = 248   e = 10   V = 11   T = 345191655699
i = 249   e = 10   V = 13   T = 407953774917
i = 250   e = 10   V = 15   T = 470715894135
i = 251   e = 10   V = 17   T = 533478013353
i = 252   e = 10   V = 19   T = 596240132571
i = 253   e = 10   V = 21   T = 659002251789
i = 254   e = 10   V = 23   T = 721764371007
i = 255   e = 10   V = 25   T = 784526490225
i = 256   e = 10   V = 27   T = 847288609443
i = 257   e = 10   V = 29   T = 910050728661
i = 258   e = 10   V = 31   T = 972812847879
i = 259   e = 10   V = 33   T = 1035574967097
i = 260   e = 10   V = 35   T = 1098337086315
i = 261   e = 10   V = 37   T = 1161099205533
i = 262   e = 10   V = 39   T = 1223861324751
i = 263   e = 10   V = 41   T = 1286623443969
i = 264   e = 10   V = 43   T = 1349385563187
i = 265   e = 10   V = 45   T = 1412147682405
i = 266   e = 10   V = 47   T = 1474909801623
i = 267   e = 10   V = 49   T = 1537671920841
i = 268   e = 11   V = 7   T = 1977006755367
i = 269   e = 11   V = 9   T = 2541865828329
i = 270   e = 11   V = 11   T = 3106724901291
i = 271   e = 11   V = 13   T = 3671583974253
i = 272   e = 11   V = 15   T = 4236443047215
i = 273   e = 11   V = 17   T = 4801302120177
i = 274   e = 11   V = 19   T = 5366161193139
i = 275   e = 11   V = 21   T = 5931020266101
i = 276   e = 11   V = 23   T = 6495879339063
i = 277   e = 11   V = 25   T = 7060738412025
i = 278   e = 11   V = 27   T = 7625597484987
i = 279   e = 11   V = 29   T = 8190456557949
i = 280   e = 11   V = 31   T = 8755315630911
i = 281   e = 11   V = 33   T = 9320174703873
i = 282   e = 11   V = 35   T = 9885033776835
i = 283   e = 11   V = 37   T = 10449892849797
i = 284   e = 11   V = 39   T = 11014751922759
i = 285   e = 11   V = 41   T = 11579610995721
i = 286   e = 11   V = 43   T = 12144470068683
i = 287   e = 11   V = 45   T = 12709329141645
i = 288   e = 11   V = 47   T = 13274188214607
i = 289   e = 11   V = 49   T = 13839047287569
i = 290   e = 12   V = 7   T = 17793060798303
i = 291   e = 12   V = 9   T = 22876792454961
i = 292   e = 12   V = 11   T = 27960524111619
i = 293   e = 12   V = 13   T = 33044255768277
i = 294   e = 12   V = 15   T = 38127987424935
i = 295   e = 12   V = 17   T = 43211719081593
i = 296   e = 12   V = 19   T = 48295450738251
i = 297   e = 12   V = 21   T = 53379182394909
i = 298   e = 12   V = 23   T = 58462914051567
i = 299   e = 12   V = 25   T = 63546645708225
i = 300   e = 12   V = 27   T = 68630377364883
i = 301   e = 12   V = 29   T = 73714109021541
i = 302   e = 12   V = 31   T = 78797840678199
i = 303   e = 12   V = 33   T = 83881572334857
i = 304   e = 12   V = 35   T = 88965303991515
i = 305   e = 12   V = 37   T = 94049035648173
i = 306   e = 12   V = 39   T = 99132767304831
i = 307   e = 12   V = 41   T = 104216498961489
i = 308   e = 12   V = 43   T = 109300230618147
i = 309   e = 12   V = 45   T = 114383962274805
i = 310   e = 12   V = 47   T = 119467693931463
i = 311   e = 12   V = 49   T = 124551425588121
i = 312   e = 13   V = 7   T = 160137547184727
i = 313   e = 13   V = 9   T = 205891132094649
i = 314   e = 13   V = 11   T = 251644717004571
i = 315   e = 13   V = 13   T = 297398301914493
i = 316   e = 13   V = 15   T = 343151886824415
i = 317   e = 13   V = 17   T = 388905471734337
i = 318   e = 13   V = 19   T = 434659056644259
i = 319   e = 13   V = 21   T = 480412641554181
i = 320   e = 13   V = 23   T = 526166226464103
i = 321   e = 13   V = 25   T = 571919811374025
i = 322   e = 13   V = 27   T = 617673396283947
i = 323   e = 13   V = 29   T = 663426981193869
i = 324   e = 13   V = 31   T = 709180566103791
i = 325   e = 13   V = 33   T = 754934151013713
i = 326   e = 13   V = 35   T = 800687735923635
i = 327   e = 13   V = 37   T = 846441320833557
i = 328   e = 13   V = 39   T = 892194905743479
i = 329   e = 13   V = 41   T = 937948490653401
i = 330   e = 13   V = 43   T = 983702075563323
i = 331   e = 13   V = 45   T = 1029455660473245
i = 332   e = 13   V = 47   T = 1075209245383167
i = 333   e = 13   V = 49   T = 1120962830293089
i = 334   e = 14   V = 7   T = 1441237924662543
i = 335   e = 14   V = 9   T = 1853020188851841
i = 336   e = 14   V = 11   T = 2264802453041139
i = 337   e = 14   V = 13   T = 2676584717230437
i = 338   e = 14   V = 15   T = 3088366981419735
i = 339   e = 14   V = 17   T = 3500149245609033
i = 340   e = 14   V = 19   T = 3911931509798331
i = 341   e = 14   V = 21   T = 4323713773987629
i = 342   e = 14   V = 23   T = 4735496038176927
i = 343   e = 14   V = 25   T = 5147278302366225
i = 344   e = 14   V = 27   T = 5559060566555523
i = 345   e = 14   V = 29   T = 5970842830744821
i = 346   e = 14   V = 31   T = 6382625094934119
i = 347   e = 14   V = 33   T = 6794407359123417
i = 348   e = 14   V = 35   T = 7206189623312715
i = 349   e = 14   V = 37   T = 7617971887502013
i = 350   e = 14   V = 39   T = 8029754151691311
i = 351   e = 14   V = 41   T = 8441536415880609
i = 352   e = 14   V = 43   T = 8853318680069907
i = 353   e = 14   V = 45   T = 9265100944259205
i = 354   e = 14   V = 47   T = 9676883208448503
i = 355   e = 14   V = 49   T = 10088665472637801
i = 356   e = 15   V = 7   T = 12971141321962887
i = 357   e = 15   V = 9   T = 16677181699666569
i = 358   e = 15   V = 11   T = 20383222077370251
i = 359   e = 15   V = 13   T = 24089262455073933
i = 360   e = 15   V = 15   T = 27795302832777615
i = 361   e = 15   V = 17   T = 31501343210481297
i = 362   e = 15   V = 19   T = 35207383588184979
i = 363   e = 15   V = 21   T = 38913423965888661
i = 364   e = 15   V = 23   T = 42619464343592343
i = 365   e = 15   V = 25   T = 46325504721296025
i = 366   e = 15   V = 27   T = 50031545098999707
i = 367   e = 15   V = 29   T = 53737585476703389
i = 368   e = 15   V = 31   T = 57443625854407071
i = 369   e = 15   V = 33   T = 61149666232110753
i = 370   e = 15   V = 35   T = 64855706609814435
i = 371   e = 15   V = 37   T = 68561746987518117
i = 372   e = 15   V = 39   T = 72267787365221799
i = 373   e = 15   V = 41   T = 75973827742925481
i = 374   e = 15   V = 43   T = 79679868120629163
i = 375   e = 15   V = 45   T = 83385908498332845
i = 376   e = 15   V = 47   T = 87091948876036527
i = 377   e = 15   V = 49   T = 90797989253740209
i = 378   e = 16   V = 7   T = 116740271897665983
i = 379   e = 16   V = 9   T = 150094635296999121
i = 380   e = 16   V = 11   T = 183448998696332259
i = 381   e = 16   V = 13   T = 216803362095665397
i = 382   e = 16   V = 15   T = 250157725494998535
i = 383   e = 16   V = 17   T = 283512088894331673
i = 384   e = 16   V = 19   T = 316866452293664811
i = 385   e = 16   V = 21   T = 350220815692997949
i = 386   e = 16   V = 23   T = 383575179092331087
i = 387   e = 16   V = 25   T = 416929542491664225
i = 388   e = 16   V = 27   T = 450283905890997363
i = 389   e = 16   V = 29   T = 483638269290330501

P = 77027314874113107478158991641287681822487280899
  A = 21963464723281779041913
  B = 3507065749624756498911323

                    *******************

 Temps écoulé : 6.51 s soit : 0.0 min  6.51 s

Le même sans l'affichage des V et T mais avec vérif :


                *************************************************
                *      Alignements progressif de produits       *
                *             Idée : cosinuspax                 *
                *                    v.2                        *
                *************************************************


          *** Début du programme ***
A = 45413
B = 3507065749624756498911323
P = 159266376887709066885059911399

P = 77027314874113107478158991641287681822487280899
  A = 21963464723281779041913
  B = 3507065749624756498911323

                    *******************

 Temps écoulé : 0.15 s soit : 0.0 min  0.15 s

A0*T*B = 77027314874113107478158991641287681822487280899
N*T      = 77027314874113107478158991641287681822487280899

Le temps n'est pas le même !

Moi, j'ai corrigé autrement.
Parce que accepter A=A*T pour faire A/T c'est une hérésie
* mathématique : on multiplie A par T pour avoir le plaisir de rediviser par T ?
   Je suis le premier à avoir commis cette sottise il y a 40 ans (je m'étais traité de tous les noms en m'en apercevant) : un certain événement se produisait 60 fois par jour. Je me suis demandé alors une fois tous les combien de min ? Et de faire 24 * 60 = 1440 et 1440/60 = 24 !!!
* informatique : on fait systématiquement une opération de trop... De plus avec ta division tu obtenais un... décimal (déjà signalé)
J'ai donc corrigé comme ça ton code :
input A
A0=A
input B

et 18 A=A0 * T

Ça te va ?

@+

[EDIT] Hmmmm. J'ai un doute...
Quel que soit A0 et B, A0 * B = N  et  (A0*B)*T = N*T c'est toujours vrai...
N'aurais-je rien compris à ton post #183 ?

Dernière modification par yoshi (26-09-2019 15:55:58)

Hors ligne

#191 26-09-2019 18:22:24

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

J'ai l'impression que ça marche. Exemple 4 :  on a bien un nombre respectable d'étapes (avec T énormes), au lieu d'une trentaine de millions de M. Je m'attendais même à un nombre de i plus grand (je t'avais dit entre 500 et 600). Donc tout baigne, et ta correction est meilleure naturellement. Merci pour ton aide.
A bientôt pour la phase suivante.

Dernière modification par cosinuspax (27-09-2019 08:45:19)

Hors ligne

#192 26-09-2019 20:02:21

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Re,

Je l'espère pour toi, mais la preuve évoquée dans ton post #183 - si je l'ai bien comprise - n'en est pas une
En effet, conne je le te l'ai dit
Quel que soit A0 et B, A0 * B = N  et  (A0*B)*T = N*T c'est toujours vrai...
J'ajoute : et quel que soit T !

Alors ?

@+

Hors ligne

#193 27-09-2019 08:39:58

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

De quelle preuve parles-tu ?
Du moment qu'on a : A x T x B = N x T c'est OK, mais ce n'est pas une preuve d'alignement. C'est la certitude que N x T est exprimé par (A x T x B).

Hors ligne

#194 27-09-2019 08:58:21

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Ce T est quand même dingue : 483638269290330501. Avec le programme (2) on a forcément des T plus grands qu'avec le programme (1) puisque les écarts entre les T sont exponentiels. Par contre, le nombres d'étapes (i) est considérablement moindre (389 au lieu de 31 000 000 de M).
De plus, le système n'utilise que les nombres premiers de 3 à 47. Lorsque A se rapproche quantitativement de B (ligne 10 du programme), le produit (A x T) x B se comporte comme un produit ordinaire, c'est à dire qu'il finit par s'aligner en peu d'étapes.

Dernière modification par cosinuspax (27-09-2019 10:54:33)

Hors ligne

#195 27-09-2019 15:38:22

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Salut,


Ce que j'ai voulu dire c'est que
1. N = A0 * B et qu'il ne change jamais au cours des calculs.
2. Prenons un T quelconque
    Je calcule N * T, mais N =A0 * B donc N * T = A0 * B * T cette égalité est toujours vraie peu importe la valeur de T.
    De plus P = N * T et A = A0 *T   donc P = A * B...
    Cette égalité n'a donc aucun intérêt à partir du moment où on écrit A =A0 * T
    Simplement, avant la correction on avait A = A * T, et là, l'égalité était fausse.
    La correction faite, cette égalité est devenue une Tautologie, un truisme...
    Je la retire donc de ma présentation.
3.  Par hérésie informatique : 1 calcul de trop à chaque itération, je voulais dire (j'ai oublié, je vais corriger), qu'en informatique on essaie d'écrire des programmes les moins gourmands possibles, en ressources et en calculs . gain de temps et d'efficacité !


Oui, j'ai bien noté la taille du T, au premier essai j'ai été incrédule vu la durée...
C'est là que pour me convaincre et accéder à ta demande, j'ai fait défiler la liste des e,V, T.
Au passage, tu auras sûrement noté l'accélération de ton 2e système par rapport au précédent où l'exemple 4 n'avait de résultat qu'au bout de 6 min, dans ta v2, c'est entre 1/10e et 2/10e s.Quand tu auras lu ce post, je déplacerai cette discussion (ce sujet) vers le sous-forum Programmation.

Voilà d'ailleurs mon dernier code :


#!/usr/bin/env python
# coding: utf-8 -*-

from math import sqrt
from time import time

def racine_entiere(n):
    """ Sur la base de la méthode de Héron"""
    if n<10**10:                  # Si n a moins de 11 chiffres
        return int(sqrt(n))
    ln_str=len(n_str)              # longueur du nombre n
    ln_utile=(ln_str-10)//2       # moitié de la longueur au delà de 10 chiffres
    n_coupe = n//(10**(ln_str-10))# 10 premiers chiffres
    rac=int(sqrt(n_coupe))*10**ln_utile
    r0=1
    while not r0==rac:
        r0=rac
        rac=(rac**2+n)//(2*rac)
    return rac

def calculs_de_base(V,e,P,T,N):
    V+=2
    if e == - 1:
        T = V
    if V == 51:
        e+=1
        V = 7
    if e>-1 and V==7:
        T=51*9**e
    if T>49*9**e:
        T = 9**(e+1)*V
    P=N*T
    R = racine_entiere(P)
    L=R**2+R
    return e,P,V,L,R,T

def titre():
    print("\n")
    print("                *************************************************")
    print("                *      Alignements progressif de produits       *")
    print("                *             Idée : cosinuspax                 *")  
    print("                *                    v.2                        *")
    print("                *************************************************","\n\n")
   

debut=time()
titre()
A = 45413
B = 3507065749624756498911323

print("          *** Début du programme ***")
A0=A
N=A*B
e,V,T=-1,-1,0
print ("A0 =",A0)
print ("B =",B)
print ("P =",N,"\n")
arret,P=0,N
while not arret:  
    e,P,V,L,R,T=calculs_de_base(V,e,P,T,N)
    while True:
        if L>P:
            break
        elif L<P :
            S=P-L
        if P==N:
            if P>S**2:
                if  A>=S and B>=S:
                    print ("P =",P)
                    print("  A =",A)
                    print("  B =",B)
                    print()
                    break
                elif A<S or B<S:
                    break
        A=A0*T
        if P>S**2:
            if A>=S and B>=S:
                print ("P =",P)
                print("  A =",A)
                print("  B =",B,"\n")
                arret=1
                break
        if A<S or B <S:
            break

print("                    *******************")
tps=round(time()-debut,2)
print ("\n","Temps écoulé :",tps, "s", end=" ")
mins, sec=divmod(tps,60)
print ("soit :", int(mins),"min ",sec,"s")
 

Explications concernant ma def racine_ entiere
L'idée de base est la méthode de calcul d'une racine carrée de Heron.
Aujourd'hui, on la retrouve assez souvent sous la forme de l'étude d'une suite définie par récurrence qui converge très très vite : logée dans une boucle, en 18 itérations et 1,8 s j'obtiens 25000 décimales pour $\sqrt 5$ par ex
$u_{n+1}=\dfrac{u_n^2+5}{2u_n}$
Bien sûr en python pour avoir 25000 décimales (par ex), il faut importer le module decimal :


#!/usr/bin/env python
# coding: utf-8 -*-

from time import time
from decimal import Decimal as D, getcontext
getcontext().prec=25000

def rc(N):
    u=D(2)
    u0=D(1)  
    while not u0==u:   # dès que la racine ne change plus, on sort...
        u0=u  # stockage de u avant modif en vue de comparaison
        u=(u**2+D(N))/(u*D(2))
    return u

debut=time()
print (rc(5))
print(time()-debut)
 

On peut aussi démarrer avec u = D(1) ou D(3) par exemple...

L'idée m'est venue d'adapter cela au calcul de la racine entière en remplaçant le / par //.
L'expérimentation m'a cependant montré que si racine approchée de départ est trop inférieure à la racine entière vraie, le résultat est faux.
Les quelques lignes qui précèdent la boucle sont là pour approximer une racine entière de départ acceptable..
Tant que le nombre dont il faut calculer la racine entière a moins de 11 chiffres (limite arbitraire), j'utilise la fonction sqrt du module math.
À partir de 11 chiffres, je vais garder un nombre composé es 10 premiers chiffres  et dont je calcule la racine entière avec int(sqrt(...))..
Les autres chiffres étant remplacés par des zéros, je divise par 2 ce nombre de chiffres pour utiliser une puissance de dix multipliant cette racine entière.
Exemple
Soit n =54321467890143579
1. ln_str=len(str(n)) = 17
2. ln_utile=(ln_str-10)//2  = (17-10)//2 = 3
3. n_coupe = n//(10**{(ln_str-10)) }=n//(10^7)=5432146789
4. rac=int(sqrt(n_coupe)))*10**ln_utile = 73703*10**3 = 73703000
5. r0=1 pour définir r0 avant de l'utiliser
6. et suivantes : je boucle

Résultat : rac = 233069663...
Tout ça pour ça ?
Bin, amusez-vous avec la def et n de 353 chiffres...
n=63094356715608696926381197557554234379625310554711453864375923727662163230808394316395194680654556960697524632598720323766501473030408534874382964883126860709185690102995837158849314781242242754210890969005683515763583063838621240426989722134009648160727402919968667486929039080697180501228511193044567884678516027280508811244663777625236069839834642321

rac=251185900710228353625655108952663405535919062817316936476666854871741026694017197416142676644915893714140303331399065966965867712533044407388677889970875814265979168448506481413
Et on a bien $rac^2<n$ et $(rac+1)^2>n$

J'ai même un essai avec 6789 chiffres pour n (cf post #47).
Et là encore, on a bien $rac^2<n$ et $(rac+1)^2>n$...

@+

Hors ligne

#196 27-09-2019 16:10:20

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Intéressant.

Hors ligne

#197 28-09-2019 07:59:06

LEG
Membre
Inscription : 19-09-2012
Messages : 790

Re : Alignement de produits

Bonjour

cosinuspax a écrit :

Intéressant.

c'est intéressant, si tu comprends ce que Yoshi essaye de te montrer .....

Car lorsque tu dit :

Du moment qu'on a : A x T x B = N x T c'est OK, ..... C'est la certitude que N x T est exprimé par (A x T x B).

On se demande si tu comprends qu'il ne peut en être autrement...????

puisque et comme Yoshi te le fais remarquer:

Cette égalité est toujours vraie, peu importe la valeur de T , car :N = A0 * B, donc A0 * B * T = N*T

Comment : N*T pourrait être exprimé autrement , quelque que soit A0 et  B.....

Effectivement Yoshi raccourcit les étapes et le nombre d'opérations, considérablement avec son idée de simplifier le calcul des racines carrées entière pour aller directement à : (rac +1)² > N

Dernière modification par LEG (28-09-2019 08:03:18)

Hors ligne

#198 28-09-2019 09:26:55

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Salut LEG, il serait souhaitable que tu comprennes quelque chose au processus d'alignement avant de jouer au professeur. Si, il peut en être autrement. L'égalité A x T x B = N x T n'est vraie que si A x B et N sont multipliés par le même T, ce qui n'était pas le cas avant la correction puisque le programme tenait compte du A x T précédent. Maintenant, on se doute que cette égalité est toujours vraie quand le programme fonctionne (c'est l'histoire du nez sur la figure).
Quant à Yoshi qui raccourcit les étapes oui, dans le domaine qui est le sien, que je respecte. Mais ce n'est pas la technique de Yoshi qui raccourcit les étapes dans le dernier programme, c'est la mienne (#132). Si tu te souviens de ce que donnait le même test avec le programme (1), la comparaison est sans appel.

Dernière modification par cosinuspax (28-09-2019 12:06:52)

Hors ligne

#199 28-09-2019 18:58:56

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : Alignement de produits

Bonsoir les jeunes,

LEG a écrit :

Effectivement Yoshi raccourcit les étapes et le nombre d'opérations, considérablement avec son idée de simplifier le calcul des racines carrées entière pour aller directement à : (rac +1)² > N

Ça n'a rien à voir avec le script de cosinuspax que j'ai retranscrit en Python.
Quant j'écris rac²<N  et (rac+1)²>N, je montre simplement que j'ai vérifié que le nombre que j'obtiens est bien la racine carrée entière de N.
D'ailleurs, pour être tout à fait correct mathématiquement, mon 1er test devrait être [tex]rac^2\leqslant N[/tex] et non rac²<N...

Jusqu'à travailler avec cosinuspax, j'utilisais une méthode de calcul de cette racine carrée entière qui n'était pas de moi... Et puis en cours de chemin, je me suis dit qu'il serait bon que je fabrique la mienne.
J'ai tâtonné un certain temps, avant de trouver la forme définitive et donc je l'ai publiée - fièrement - dans mon code...
Mais, j'avais des chances d'être lus par des gens intéressés et qui, si je n'expliquais pas un minimum le pourquoi des quelques lignes de ma fonction racine_entiere, risquait de se demander pourquoi je procédais ainsi.
Je me suis donc expliqué assez complètement, gardant un point sous silence : le pourquoi de la division euclidienne par 2 dans le calcul de la longueur utile....
Il faut bien que je donne un peu matière à réflexion à ceux qui me lisent.
Je leur facilite la tâche en utilisant des noms de variables assez évocateurs...

Elle est plus courte que celle que j'utilisais avant, mais rien ne dit que je suis plus rapide : mais après tout quelle importance ?
En effet seulement 1,8 s et 18 itérations pour calculer la racine entière d'un nombre de 6789 chiffres.
LEG a une machine plus rapide que la mienne, il devrait descendre en dessous de la seconde...
Cela dit, on n'aura pas tous les jours à calculer la racine entière d'un nombre de 6789 chiffres, donc compris entre $10^{6788}$ et
$9,\underbrace{9999\cdots 9999}_{6788 \text { chiffres }9}\times 10^{6788}$...
Sauf bien sûr, si cosinuspax dans sa version 3, envisageait de tester des alignements avec des nombres dans cet ordre de grandeur ! ^_^

Donc tout ce qui suit la phrase n'était pas directement et prioritairement adressé à cosinuspax, c'était juste la justification de mon procédé.
Ledit procédé était nécessaire à partir du moment où on travaillait avec des valeurs de P telles que obtenues dans l'exemple 4.
En natif, Python ne possède pas de calcul de racine carrée entière, et la solution consistant à prendre la partie entière de la racine carrée de P, pour P assez grand, occasionnait un message d'erreur...

Il fallait trouver une solution sans quoi cosinuspax ne pouvait pousser ses calculs assez loin. Je 'ai pas cherché à gagner de temps avec : nécessité faisant loi,  c'est purement utilitaire !

Et oui, la comparaison entre v2 et v1 est sans appel, la nouvelle idée (que je n'ai fait que traduire en Python) divise le temps d'attente dans l'exemple 4 par 40 ou 50...
Je chercherai à optimiser mes codes lorsque je saurai de A à Z le rôle assigné à chaque lettre.
Pour le moment, je me contente de traduire le peudo-code fourni en un code Python fonctionnel et quand il y a un problème avec le code Python, je n'en suis pas plus affecté que cela, c'est dans l'ordre "normal" des choses : il est rare que cela marche du 1er coup (sauf pour écrire Bonjour à l'écran)...
Combien de temps croyez-vous que j'aie passé pour que mon programme de jeu du Morpion solitaire avec bonus fonctionne sans erreur ?
Des heures et des heures... et encore j'avais une base celle du programme écrit en BASIC pour mon Amstrad CPC 6128 (qui ne disposait que de 128 ko de mémoire et dont la vitesse de processeur était de 4,7 Hz. Aujourd'hui ma machine a 16 Go de RAM et le proco tourne à 2,6 GHz.
Pour obtenir 120 décimales pour le nombre d'or, il fallait 1 h 30 ! J'avais été obligé de récrire les 4 opérations pour  des nombres dépassant 12 chiffres...

Pax vobiscum !

@+

Hors ligne

#200 29-09-2019 09:14:26

cosinuspax
Membre
Inscription : 23-02-2019
Messages : 252

Re : Alignement de produits

Salut Yoshi,

J'ai rajouté une petite routine de vérif concernant le facteur A à la fin du programme. Si A est dans la suite S, le produit est aligné probable. Si non, le produit est seulement pseudo aligné. En général (j'ai testé sur les petits nombres) l'alignement probable s'atteint aussi rapidement que l'alignement à priori. Mais on n'est jamais vraiment tranquille tant qu'on n'en a pas la preuve ...

Input A
A0 = A
Input B
A < B

1 N = A x B
2 P = N
3 V = 1
4 e = - 1
5 i = i + 1 (i = 0)
6 Si i > 1, V = V + 2
7 Si e = - 1, T = V
8 Si V = 51, e = e + 1 et V = 7
9 Si e > - 1 et si V = 7, T = 51 x 9^e
10 Si T > 49 x 9^e, T = 9 x (9^e x V)

11 Si i > 1, P = N x T
12 R = sqrt entière de P
13 L = R^2 + R
14 Si L > P, aller à next i.
15 Si L < P, S = P - L
16 Si P = N, alors si P > S^2, si A >=S, si B >= S, aller à 21.
17 Sinon, si A ou B < S, aller à next i.
18 A = A0 x T
19 Si P > S^2, si A >= S, si B >= S, aller à 21.
20 Sinon, si A ou B < S, aller à next i.


21 A - S = C
22 Si C = 0 alors print P, A et B. STOP.
23 D = sqrt entière de C
24 F = D^2 + D + S
25 Si A = F alors print P, A et B. STOP. (aligné probable)
26 Sinon, si A différent de F, aller à next i. (pseudo aligné)

Bon dimanche.

Dernière modification par cosinuspax (29-09-2019 09:49:37)

Hors ligne

Pied de page des forums