Date d'inscription: août 2004 Localisation: roquesteron 06910 Âge: 60
Messages: 952
| Re : Génération de nombres premiers.
S,1 S,7 S,11 S,13 S,17 S,19 S,23 S29
-- -- -- -- -- 7*7 -- --
-- -- -- -- 11*7 -- -- --
7*13 -- -- -- -- -- --
11*11 -- -- 7*19 -- -- 11*13 7*17
-- -- 7*23 -- -- 13*13 -- --
-- 11*17 -- -- -- -- 7*29 --
-- 31*7 17*13 -- -- -- -- 11*19
-- 13*19 -- 11*23 -- 7,37 -- --
-- -- -- -- 7,41 17*17 -- --
7,43 -- -- -- -- 11*29 17*19 13*23
-- -- 11*31 7,7,7 -- -- -- 7*47
19*19 7,53 13*29
17*23 31*13 11,37 7,59
7,61 23*19
11,41 7,67 11,43
13,37 17*29 7,71
7,73 11,47 31*17 23*23 13,41
19*29 7,79 13,43
7,83 11,53 31*19
13,47 7,89
13,7,7 11,59
23*29 11,61 7,97
17,41 19,37 7,101 31*23
7,103 17,43 11,67
7,109 13,59
11,71 7,113 13,61 17,47 11,73
19,43 17,7,7
29*29 11,11,7 23,37
13,67 7,127 19,47
53,17 11,83 7,131 13,71
7,7,19 23,41 13,73
31*31 7,139 11,89
13,11,7 17,59 19,53
13,79 17,61 7,149
7,151 11,97 29,37
11.101 7². 23
7 13. 89
11.107 7.13²
17.71 7.173
11.113 29. 43
j'ai du mal, a faire rentrer la série 29, cela n'est pas grave , les -- représent les cellules vide ce sont donc des nombres premiers. je vais t'envoyer par ton adresse ce même tableau avec les couleur par séries ce qui te permettra de distinguer les couple de basespar série et leurs position.
je viens de regarder ce que cela donne c'est la pagaille dans le tableau tu as déja l'explication ci dessous .je te renvois le tableau sur ton adresse et ensuite tu me recontacte.
Programmation, explication :
A/ Fixer la limite X = Nombre de cellules. Etablir le tableau : par exemple : 10000 cellules, soit la valeur 300000, une cellule vaut 30. Sauf la cellule 0 qui vaut la valeur de la série concernée, par exemple : 1, 7, 11……29.
Il y a 8 séries.
Les cellules sont représentées par des 0 donc des cellules vides, une cellule marquée par un 1 est une cellule composée, d’où cellule = 0 = Nombre Premier.
On peut limiter le nombre de cellule par tableaux ou faire un grand tableau divisé en sous-tableaux.
B/ Positionner les bases par rapport à la cellule zéro = 1, 7,……29. Par exemple pour la série 13 : la valeur de la cellule zéro = 13 puis on augmente de 30 à chaque cellule : soit : 43, 73,……..103 etc…. On positionne dans la cinquième cellule les bases 7 et 19 = F1 et F2, dans la 9ème cellules, les bases F3 et F4 = 11 et 23 ; dans la 14ème cellule, les bases F5 et F6 = 13 et 31 et dans la 17ème cellule, les bases F7 et F8 = 17 et 29.
« Valeur de la 17ème cellule = (16 x 30) + 13 = 17 x 29 = 493 »
Nous avons donc bien 4 cellules composées et 13 cellules premières. Pour générer les nombres premiers, il suffit de compter les 0 en partant de la cellule 0 = 13, puis + 30, soit 13, 43, 73, 103, c , 163, 193, 223, c,
Ce qui donne : 0 0 0 0 1 0 0 0 1
0 0 1 0 1 0 0 1 0 1 1 0 0 0 1 0 1 1
0 0 0 1 1 1 1 0 0
0 0 0 1 0 1
C/ Nous avons positionné les 8 bases ; maintenant on les fait partir, c’est-à-dire, elles vont compter leur nombre de cellules et se positionner avec leur conjoint = C + 30 et marquer la cellule en remplaçant le 0 par un 1…
Première base = 7 sans conjoint = (19 + 30) = 49 ; 7, compte 7 cellules, se positionne avec 49 dans la 12ème cellule et attend que les autres bases soient passées ; pareil pour la base 19 avec son conjoint = (7 + 30) = 37, va se positionner 19 cellules plus loin, c’est-à-dire 5 + 19 = 24ème et idem avec les 6 autres bases.
D/ Seul et seulement les bases divisent le conjoint avant que ce dernier ne parte compter les cellules jusqu’à la limite X fixée ; les bases se positionne toujours avec leur nouveau conjoint et attendent leur tour. Seul et seulement les conjoints si ils sont premiers comptent et marquent les cellules d’un 1 à chaque saut et ce, jusqu’à X fixé.
E/ Comment savoir si le conjoint C + 30 est premier :
1/ Lorsque la base arrive dans une cellule marquée par un 0.
Si la base arrive avec son conjoint dans une cellule marquée par 1, alors : ce conjoint est composé, donc effacé, il ne comptera pas de cellule. Seule les bases ou les conjoints premiers comptent et marquent les cellules d’un 1
2/ Si la base divise le conjoint C + 30, alors là aussi, c’est qu’il est composé donc effacé : Exemple : (49/7 = 7 ; 37/19 = 1.94). Lorsque 7 va se positionner dans la 12ème cellule avec C + 30 = 19 + 30 = 49, la 12ème cellule étant marquée par un 0 lorsque les 7 autres bases sont passées, elles n’ont pas marquées d’un 1 la 12ème cellule, on pourrait donc penser que 49 est premier : Or, 7 divise 49, ce qui est le deuxième contrôle donc 49 est effacé, la base 7 partira recompter 7 cellules, ira se positionner avec son nouveau conjoint C + 30 = 49 + 30 = 79, dans la 19ème cellule marquée par un 0 ; 7 ne divise pas 79, lorsque les bases seront passées et que cela sera le tour de 79 de partir, 79 marquera d’un 1 toutes les 79 cellules jusqu’à la limite X fixée sans s’arrêter.
F/ Lorsque les bases ont atteints la limite X, le programme compte toutes les cellules marquées par un 0, on aura donc le nombre de nombre premier jusqu’à X et les nombres premiers 13 + 30 + 30 + 30 + 30….
« Ne sont retenues que les valeurs des cellules marquées par un 0 bien entendu »
Factorisation des cellules composées, c’est exactement le même programme à la différence que là, au lieu de marquer les cellules par un 1, on marque la valeur de la base ou du conjoint premier C + 30 dans les cellules, par exemple : 5ème cellule = 7, 19 ; 9ème cellule = 13.23, 14ème cellule = 13.31 ; 17ème cellule = 17.29, 19ème cellule = 7 uniquement, 49 est composé = 7 x 7, 24ème cellule, 19.37 ; etc…etc…
Les facteurs composés ayant été effacés, il n’y aura que la décomposition des cellules composées en facteurs premiers. On l’aura compris, un e cellule avec un seul facteur, c’est un facteur premier à la puissance N, ce qui nous intéresse c’est les facteurs distincts d’un nombre composé. Exemple 12ème cellule, il n’y aura que 7 dans la cellule et non pas trois 7 comme on peut le voir dans le tableau ci-joint, cela a été fait manuellement pour comprendre.
G/ Il en sera de même pour les 7 autres séries ci-joint en factorisation.
(Les fichiers sources du programme prime ou, nombre premier sont écris en C++.
Le programme nombre premier énumère les nombres premiers jusqu’à 450000000000, par série , dans l’ordre croissant, en 1 heure avec un PC ayant 2 Gigas de ram ; car Windows n’alloue que 2094 Mo par instance de programme.
Amicalement leg.
|