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).

#26 Re : Programmation » Alignement de produits » 08-10-2019 12:10:55

LEG, ton cheminement est correct. Avec 7 x 17, on trouve un alignement avec T = 3 (si on retient les nombres premiers). On a A = 21, B = 17 tous deux supérieurs à S = 15. Produit aligné A PRIORI.  Donc A = 17 et B = 21 (on inverse), et on teste 17 :  17 - 15 = 2 qui est bien égal à 1 x 1 + 1. Donc 17 x 21 est un produit aligné PROBABLE (même sûr car A et B sont tous deux dans la suite 15). La vérif ajoutée (F) nous permet de savoir si un produit est aligné PROBABLE ou pas. Il y a plein de produits alignés "à priori", mais beaucoup moins de produits alignés "probables". C'est pour ça que je tiens compte des diviseurs de T qui donnent lieu à une division plus fine des produits que le simple produit de A0 x T.

#27 Re : Programmation » Alignement de produits » 08-10-2019 11:46:30

Tu peux tester avec la version précédente, ça marchera aussi à condition de tenir compte de B = P / T.
J'ai simplement rajouté un bloc "nombres premiers". Mais on peut s'en passer.

#28 Re : Programmation » Alignement de produits » 08-10-2019 09:34:44

Re Yoshi. J'ai tout remis en écriture "basic instinct" (GOTO, NEXT, IF ...). C'est plus simple pour moi. J'ai délimité les différents blocs. Ligne 26, j'ai tenu compte des premiers (jusqu'à 47).

Input A
A0 = A
Input B

CALCUL DE T

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)

CALCUL DE P (ET S)

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

TEST ALIGNEMENT A ET B SI P = N

16 Si P = N, alors si P > S^2, si A >=S, si B >= S, aller à 20.
17 Sinon, si A ou B < S, aller à next i.
18 Si P > N et si T < 63, aller à 26.
19 Si T >= 63, aller à 53.
20 A - S = C
21 Si C = 0 alors print P, A et B. STOP.
22 D = sqrt entière de C
23 F = D^2 + D + S
24 Si A = F alors print P, A et B. STOP.
25 Si A différent de F, aller à next i.

TEST ALIGNEMENT A ET B SI T EST PREMIER

26 Si T est un nombre premier >= 3 et <= 47, alors A = A0 x T.
27 Sinon, aller à 38.
28 B = P / A
29 Si P > S^2, si A >= S, si B >= S, aller à 31 (aligné à priori).
30 Sinon, si  A ou B < S, aller à next i.
31 Si A > B, alors A = B et B = A
32 A - S = C
33 Si C = 0 alors print P, A et B. STOP.
34 D = sqrt entière de C
35 F = D^2 + D + S
36 Si A = F alors print P, A et B. STOP (aligné probable).
37 Si A différent de F, aller à next i.

TEST ALIGNEMENT A ET B SI T EST COMPOSE >=9 <=49

38 h = 1
39 h = h + 2
40 Si h > (T + 1) / 2, aller à next i.
41 Si T mod h = 0, alors A = A0 x h
42 Si T mod h différent de 0, aller à next h.
43 B = P / A
44 Si P > S^2, si A >= S, si B >= S, aller à 46 (aligné à priori).
45 Sinon, si  A ou B < S, aller à next h.
46 Si A > B, alors A = B et B = A
47 A - S = C
48 Si C = 0 alors print P, A et B. STOP.
49 D = sqrt entière de C
50 F = D^2 + D + S
51 Si A = F alors print P, A et B. STOP (aligné probable).
52 Si A différent de F, aller à next h.

CALCUL DE K

53 Q = T / V
54 W = 3
55 j = 1
56 j = j + 1
57 Tant que W < Q alors W = W x 3
58 next j
59 k = j

TEST ALIGNEMENT A ET B SI T > 49 (avec A = 3^m x A0)

60 m = - 1
61 m = m + 1
62 Si m > k, aller à 74
63 A = 3^m x A0
64 B = P / A
65 Si P > S^2, si A >= S, si B >= S, aller à 67 (aligné à priori).
66 Sinon, si  A ou B < S, aller à next m.
67 Si A > B, alors A = B et B = A
68 A - S = C
69 Si C = 0 alors print P, A et B. STOP.
70 D = sqrt entière de C
71 F = D^2 + D + S
72 Si A = F alors print P, A et B. STOP (aligné probable).
73 Si A différent de F, aller à next m.

TEST ALIGNEMENT A ET B SI T > 49 (avec A = 3^n x V x A0)

74 n = - 1
75 n = n + 1
76 Si n > k, aller à next i.
77 A = (3^n x V) x A0
78 B = P / A
79 Si P > S^2, si A >= S, si B >= S, aller à 81 (aligné à priori).
80 Sinon, si  A ou B < S, aller à next n.
81 Si A > B, alors A = B et B = A
82 A - S = C
83 Si C = 0 alors print P, A et B. STOP.
84 D = sqrt entière de C
85 F = D^2 + D + S
86 Si A = F alors print P, A et B. STOP (aligné probable).
87 Si A différent de F, aller à next n.

#29 Re : Programmation » Alignement de produits » 08-10-2019 09:23:08

Re LEG. Autant pour moi, ce n'est pas B = T/A mais B = P/A. Merci de ta remarque.

#30 Re : Programmation » Alignement de produits » 07-10-2019 13:56:14

Modif lignes 54 et 68. Tu voulais savoir ce que devient le B en cours si A devient B ?  Il devient A évidemment.

#31 Re : Programmation » Alignement de produits » 07-10-2019 13:13:38

Question 1 : deuxième interprétation (comme c'est écrit).
Question 2 : corrigé d'après ton exemple en Python. Que vient faire la ligne 74 ici ?  Quand on sort de la boucle j on a la valeur de k. C'est tout.
Question 3 : je t'ai répondu. B disparaît en prenant la valeur de A. Un autre B apparaît avec next m ou next n si le résultat est différent de F.
Question 4 : oui, tu peux intervertir les deux lignes, mais c'est moins logique (pour moi) puisque le programme calcule les T < 63 avant d'aborder les T >= 63.
Sinon, je réponds à tes questions, comme tu vois.

#33 Re : Programmation » Alignement de produits » 07-10-2019 12:41:57

Re Yoshi, j'ai corrigé en fonction de ton exemple Python. Puisqu'on sort automatiquement, pas besoin de SI W = Q alors k = j.

Si A > B alors B = A.
C'est à dire que B est testé en tant que A jusqu'à 60 (pour m) et jusqu'à 74 (pour n). Si le résultat est différent de F on change de m ou de n et un nouveau B fait automatiquement son apparition puisqu'un nouveau produit est abordé.

Merci pour tes démos en python, mais cela demande une bonne initiation avant de pouvoir s'y retrouver (c'est simple pour toi, pas forcément pour celui qui découvre !).

#34 Re : Programmation » Alignement de produits » 07-10-2019 12:26:48

k est maintenant défini par la boucle j.

41 Q = T / V
42 W = 3
43 j = 1
44 Tant que W < Q alors W = W x 3 : j = j + 1
45 k = j
47 m = - 1
48 m = m + 1
49 Si m > k, aller à 61
50 A = 3^m x A0
51 B = T / A
52 Si P > S^2, si A >= S, si B >= S, aller à 54 (aligné à priori).
53 Sinon, si  A ou B < S, aller à next m (48).
54 Si A > B, alors A = B et B = A
55 A - S = C
56 Si C = 0 alors print P, A et B. STOP.
57 D = sqrt entière de C
58 F = D^2 + D + S
59 Si A = F alors print P, A et B. STOP (aligné probable).
60 Si A différent de F, aller à next m (48).

61 n = - 1
62 n = n + 1
63 Si n > k, aller à next i.
64 A = (3^n x V) x A0
65 B = T / A
66 Si P > S^2, si A >= S, si B >= S, aller à 68 (aligné à priori).
67 Sinon, si  A ou B < S, aller à next n (62).
68 Si A > B, alors A = B et A = B
69 A - S = C
70 Si C = 0 alors print P, A et B. STOP.
71 D = sqrt entière de C
72 F = D^2 + D + S
73 Si A = F alors print P, A et B. STOP (aligné probable).
74 Si A différent de F, aller à next n (62).

#36 Re : Programmation » Alignement de produits » 06-10-2019 10:39:25

Yoshi : rassure-toi, je ne suis pas rétif à la programmation, mais la mise au point d'un algo simple me demande déjà pas mal d'efforts !

#38 Re : Programmation » Alignement de produits » 06-10-2019 10:12:11

Le principe : je calcule tous les A0 possibles en les multipliant par chaque facteur de T. Par ex, si k = 6 (729) et V = 19 on décompose le produit 3^k x 19 en 12 sous-produits.

3^0 x A0
3^1 x A0
3^2 x A0
3^3 x A0
3^4 x A0
3^5 x A0
3^6 x A0

puis :

3^0 x V x A0
3^1 x V x A0
3^2 x V x A0
3^3 x V x A0
3^4 x V x A0
3^5 x V x A0
3^6 x V x A0

On calcule B à chaque fois (B = T/A) et on vérifie l'alignement à priori. Si non, on passe au produit suivant. Si oui, on passe au test de l'alignement probable. Si oui, c'est fini, sinon on passe au produit suivant.

#39 Re : Programmation » Alignement de produits » 06-10-2019 09:56:42

k est maintenant défini par la boucle j.

41 Q = T / V
42 W = 3
43 j = 1
44 Tant que W < Q alors W = W x 3
45 j = j + 1
46 Si W = Q, alors k = j
47 m = - 1
48 m = m + 1
49 Si m > k, aller à 61
50 A = 3^m x A0
51 B = T / A
52 Si P > S^2, si A >= S, si B >= S, aller à 54 (aligné à priori).
53 Sinon, si  A ou B < S, aller à next m (48).
54 Si A > B, alors A = B
55 A - S = C
56 Si C = 0 alors print P, A et B. STOP.
57 D = sqrt entière de C
58 F = D^2 + D + S
59 Si A = F alors print P, A et B. STOP (aligné probable).
60 Si A différent de F, aller à next m (48).

61 n = - 1
62 n = n + 1
63 Si n > k, aller à next i.
64 A = (3^n x V) x A0
65 B = T / A
66 Si P > S^2, si A >= S, si B >= S, aller à 68 (aligné à priori).
67 Sinon, si  A ou B < S, aller à next n (62).
68 Si A > B, alors A = B
69 A - S = C
70 Si C = 0 alors print P, A et B. STOP.
71 D = sqrt entière de C
72 F = D^2 + D + S
73 Si A = F alors print P, A et B. STOP (aligné probable).
74 Si A différent de F, aller à next n (62).

#40 Re : Programmation » Alignement de produits » 05-10-2019 17:55:02

As-tu regardé la modif #240 ?  C'est pas mieux ?

#41 Re : Programmation » Alignement de produits » 05-10-2019 10:32:58

Modification du bloc final (à partir de 41). Les sauts sont inévitables.

41 Q = T / V
42 Q = 3^k
43 m = - 1
44 m = m + 1
45 Si m > k, aller à 57
46 A = 3^m x A0
47 B = T / A
48 Si P > S^2, si A >= S, si B >= S, aller à 50 (aligné à priori).
49 Sinon, si  A ou B < S, aller à next m.
50 Si A > B, alors A = B
51 A - S = C
52 Si C = 0 alors print P, A et B. STOP.
53 D = sqrt entière de C
54 F = D^2 + D + S
55 Si A = F alors print P, A et B. STOP (aligné probable).
56 Si A différent de F, aller à next m.

57 n = - 1
58 n = n + 1
59 Si n > k, aller à next i.
60 A = (3^n x V) x A0
61 B = T / A
62 Si P > S^2, si A >= S, si B >= S, aller à 64 (aligné à priori).
63 Sinon, si  A ou B < S, aller à next n.
64 Si A > B, alors A = B
65 A - S = C
66 Si C = 0 alors print P, A et B. STOP.
67 D = sqrt entière de C
68 F = D^2 + D + S
69 Si A = F alors print P, A et B. STOP (aligné probable).
70 Si A différent de F, aller à next n.

#42 Re : Programmation » Alignement de produits » 05-10-2019 09:28:48

Re, Si on a 9^n, on a normalement 3^2n ? (k = 2n) ? 9^10 = 3^20 ?
Pour éviter les sauts, il faut répéter des blocs entiers. Mais pourquoi pas ? Les fameuses "déviations" ont lieu pourtant chacune leur tour, il n'y a aucune simultanéité.
Je regarde pour les initialisations.

#43 Re : Programmation » Alignement de produits » 04-10-2019 15:38:14

Salut Yoshi, difficile pour moi de faire mieux, n'étant pas programmeur. Je fournis le squelette du programme, et non le corps. Jusque là, on s'en est pas trop mal tiré, pas de raison que ça ne suive pas.

Tes demandes :
Ligne 27, h est initialisé à 1 (donc 1 + 2 = 3 au premier passage). C'est comme le V = V + 2 de la ligne 6.
Ligne 43 et 47 c'est bien - 1 qui est la valeur initiale. Cela permet d'avoir - 1 + 1 = 0 au premier passage.
Ligne 30 : le h est le h de ligne 27 (c'est le h en cours, il ne peut pas être ailleurs).
Ligne 40 : le h est le h de ligne 43 (première boucle) puis de ligne 47 (deuxième boucle). Le renvoi est ligne 31, donc plus de lien avec le h de ligne 27.
Q devient 3^k : il faut convertir Q (qui est toujours 9^n) en 3^k. Exemple : Q = 729 = 3^6. En fait je devrais écrire : Q = 3^k.
Ligne 26 : oui, inclus.
Si tu préfères que je différencie les variables, dis-le moi. De tout façon NEXT h renvoie toujours au h en cours, à moins que je me sois planté quelque part ...

#44 Re : Programmation » Alignement de produits » 03-10-2019 21:48:45

Dernière version. Normalement (quand tout marchera), ce programme doit donner des produits alignés probables sans être ralenti par la taille des nombres. J'ai conservé le système T mod h  pour les T jusqu'à 49.
Q devient 3^k : c'est à dire qu'il faut transformer Q en une puissance de 3. Je te fais confiance pour ça.


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, 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 à 20.
17 Sinon, si A ou B < S, aller à next i.
18 Si P > N et si T < 63, aller à 26.
19 Si T >= 63, aller à 41.
20 A - S = C
21 Si C = 0 alors print P, A et B. STOP.
22 D = sqrt entière de C
23 F = D^2 + D + S
24 Si A = F alors print P, A et B. STOP.
25 Si A différent de F, aller à next i.

26 Si T est un nombre premier compris entre 3 et 47, aller à next i.
27 h = h + 2 (h = 1)
28 Si h > (T + 1) / 2, aller à next i.
29 Si T mod h = 0, alors A = A0 x h
30 Si T mod h différent de 0, aller à next h.
31 B = T / A
32 Si P > S^2, si A >= S, si B >= S, aller à 34 (aligné à priori).
33 Sinon, si  A ou B < S, aller à next h.
34 Si A > B, alors A = B
35 A - S = C
36 Si C = 0 alors print P, A et B. STOP.
37 D = sqrt entière de C
38 F = D^2 + D + S
39 Si A = F alors print P, A et B. STOP (aligné probable).
40 Si A différent de F, aller à next h.

41 Q = T / V
42 Q = 3^k
43 h = h + 1 (h = - 1)
44 Si h > k, aller à 47
45 A = 3^h x A0
46 Si h <= k, aller à 31
47 h = h + 1 (h = - 1)
48 Si h > k, aller à next i
49 A = (3^h x V) x A0
50 Si h <= k, aller à 31

#45 Re : Programmation » Alignement de produits » 03-10-2019 07:54:44

Salut Yoshi, que cela ne t'empêche pas de programmer ton idée d'alternance A x T - B x T. Mieux vaut deux idées qu'une. Il y a peut-être quand même une issue sans passer par les sous-produits.
Pour ma part, je cherche une méthode plus rapide de factorisation de T. C'est facile, car on connaît toujours les facteurs de T.

#46 Re : Programmation » Alignement de produits » 02-10-2019 16:29:32

Mon système de factorisation de T est trop lent. Pour les grands T, c'est la trottinette assurée. Il va falloir trouver mieux. Peut-être sera-ce suffisant pour se faire une idée.

#47 Re : Programmation » Alignement de produits » 02-10-2019 16:00:53

Yoshi, je poste la version dont je t'ai parlé, qui tente de fusionner les programmes (1) et (2). Je ne sais si tout fonctionne, mais à la limite on y arrivera. Le tout est de voir si on a toujours des produits alignés probables. Tu remarqueras que j'élimine tous les T premiers. Seuls m'intéressent les produits issus de la factorisation de T. Ligne 33, on a A qui devient B si A > B, ce qui arrivera avec l'augmentation de T, quand h est un diviseur supérieur de T.


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, 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 à 19.
17 Sinon, si A ou B < S, aller à next i.
18 Si P > N, aller à 25.
19 A - S = C
20 Si C = 0 alors print P, A et B. STOP.
21 D = sqrt entière de C
22 F = D^2 + D + S
23 Si A = F alors print P, A et B. STOP.
24 Si A différent de F, aller à next i.

25 Si T est un nombre premier compris entre 3 et 47, aller à next i.
26 h = h + 2 (h = 1)
27 Si h > (T + 1) / 2, aller à next i.
28 Si T mod h = 0, alors A = A0 x h
29 Si T mod h différent de 0, aller à next h.
30 B = T / A
31 Si P > S^2, si A >= S, si B >= S, aller à 33 (aligné à priori).
32 Sinon, si  A ou B < S, aller à next h.
33 Si A > B, alors A = B
34 A - S = C
35 Si C = 0 alors print P, A. STOP.
36 D = sqrt entière de C
37 F = D^2 + D + S
38 Si A = F alors print P, A. STOP (aligné probable).
39 Si A différent de F, aller à next h.

#48 Re : Programmation » Alignement de produits » 02-10-2019 12:31:40

LEG, dans l'exemple en question, 35 - 5 = 30 ou 5 x 5 + 5, ce qui prouve que A est dans la suite (S = 5) et B également car 11 - 5 = 6 ou 2 x 2 + 2. Donc le produit est aligné probable (sûr). A doit être plus petit que B. Si A est dans la suite ça suffit pour que le produit soit aligné probable. Mais pas l'inverse. Si A est plus grand que B et dans la suite, il faut aussi que B soit dans la suite.

#49 Re : Programmation » Alignement de produits » 02-10-2019 11:03:08

Re, Yoshi : ton idée n'est pas mauvaise mais elle t'oblige à partager entre A et B, et de plus, comme je l'ai dit, on ne tient pas compte des sous-produits qui semblent générer des alignements probables. Reprends l'exemple : 103 x 397. Avec T = 9,  aligné à priori avec 927 x 397, et aligné probable avec 309 x 1191 car 309 - 177 (S) = 132 (11 x 11 + 11). Or, 309 x 1191 est un sous-produit puisque T 9 est exprimé par 3 x 3. Donc il faut reprendre l'idée du programme (1) mais en l'accélérant avec le programme (2). Mon idée de multiplier A ou B par T n'est pas à mon sens (d'après les tests) génératrice de produits alignés probables (= quasi sûrs) ou alors une quantité infime. Cela dit, on se réserve la possibilité de changer notre fusil d'épaule. Pas de dogme !

#50 Re : Programmation » Alignement de produits » 01-10-2019 16:11:21

Oui, celui-ci est aligné probable (S = 5, 35 - 5 = 30). Mais ça ne marche plus pour les grands produits.

Pied de page des forums