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

#551 Re : Programmation » crible en python » 05-05-2018 19:51:51

LEG

Le lien du tableau Excel :

https://www.cjoint.com/c/HEfsxpV1VKK

Ainsi que le fichier Word sur le crible que j'expliquai à mon petit Fils, pour le programme...

https://www.cjoint.com/c/HEfsQTlIr7K

il va pouvoir souffler en septembre car je n'aurai plus besoin de son concour ..Grâce à Toi...! je l'ai prévenu....

je pensais que tu faisais parti des créateurs du site.. Mais ce n'est pas grave, l'intérêt c'est que cela  puisse apporter une réflexion sur ce crible  comme cela à été fait depuis 2000 ans avec Eratosthène  ...notamment pour cette conjecture relié au corollaire du TNP..N // Ln 2N
pour le nombre de nombres premiers entre N et 2N..

Concernant Goldbach ,j'avais besoins pour me convaincre de trouver un crible , de le valider, car les congruences et ce crible m'ont permis de regarder la répartition par Famille , pour 3 familles, et les 8 Familles lorsque le crible énumère tous les nombres premiers q[N;2N]
lorsque le crible pour une limite N progresse  par pas de 15k+1 et 2N, 30(k+1) on se rend compte que les congruents augmente de 30, en partant du principe que si des nombres premiers p sont congrus à 30k [Pi] il est évident qui ne le sont plus pour 30(k+1) en moyenne générale ...maintenant j'en suis convaincu , et que les Matheux peuvent toujours se casser les dents avec des outils mathématique de plus en plus complexes sans Résultat... D'ailleurs il estime qu'il y a au moins un nombre premier q [N;2N] faute d'être capable d'analyser cette fonction (N//Ln 2N)  est de la démontrer rigoureusement à l'aide de l'analyse et des propriété de ce crible , et ensuite peut être qu'il ne seront plus tenus par le postulat de Bertrand...etc ..etc

la dernière version et très rapide pour 240 000 000 , plus vite que la version G6 et G5..
mais il me semble qu'il rencontre un problème pour de granndes  valeurs je vais comparer avec la version de midi G7y, G5 , et donc G8Y

ensuite je mettrai les résultats...surement demain matin...(j'ai vu aussi pour le tableau ok) mais sur excel c'est en couleur HD granD Ecran..LoLLLL

Mais en quoi être capable de savoir combien il y a de premiers entre n et 2n, fait-il avancer le schmilblick si on ne récupère pas lesdits premiers ??[qoute]
Mais la quantité , valider par un crible sans discussion possible...! comme ils l'ont toujours fait en référence à Eratosthène Faute d'avoir Goldbach....De plus, tu sais très que le crible, peut récupérer lesdits premier à la fin en modifiant le bloc:

   premiers = []
   for i in range(8):
      for j in range(nbcell-1, -1, -1):
         if nombres[i][j] == 1:
           premier = 2*n-((j*30)+p8[i])  #en faisant une soustraction 2n - la valeur du nbcell[1] ...
            premiers.append(premier)

  Mais cela ne servirait à rien, car le but est d'estimer parmi les [1] ce qui sont premiers ou composés...quelque soit 2n >16

Bon , j'espère que tu vas passer une bonne soirée un GRand Merci Yoshi...@ +++

#552 Re : Programmation » crible en python » 05-05-2018 18:16:21

LEG

Il marche d'enfer ...en effet ....
je viens de remplacer la version de ce matin..
à++
Bravo...

#553 Re : Programmation » crible en python » 05-05-2018 18:00:24

LEG

voila ce que j'appelle un masque pour cribler celui ci-dessous
correspond à pi =13 , le programme positionne fam 2 les 8 j dans leur famille et on duplique toutes les 13 lignes [Eratosthène mod 30]
si tu veux voir ce que cela donne sur une feuille excel , je t'envoie le lien...


151  , 67  , 11  , 193  , 137  , 109  , 53  , 179     pi = 7
[151, 217, 41, 283, 107, 19, 173, 239]         pi = 11
361, 127, 101, 283, 257, 49, 23, 179]         pi = 13

..........................................................................
.                        0   
.                    0       
.                           
.        0                   
.    0                       
.                            0
.                           
.                           
.                0           
.            0               
.   
                       
.                           
0                           
.
..............................................................................

Non le maximum tu l'as fait..!  Il marche à merveille..je ne sais pas ce que tu en penses. de ce crible de Goldbach..
je trouve dommage que personne ne l'ai découvert , par conséquent étudié..
peut être que parmi tous les visiteurs cela donnera une idée
sur la répartition des nombres premiers de n à 2n...à quelqu'un.....

En plus il est très simple de modifier l'ordre des familles pour n'en cribler qu'une ou trois..et vérifier Goldbach pour les n = 30k + P8
Où les décomposants de Goldbach  ne sollicite que 3 familles pour vérifier p+q = 2n.. etc etc...

Au moins sur ton site tu peux proposer le crible..si les visiteurs ne ce sont pas déjà servis ....

#554 Re : Programmation » crible en python » 05-05-2018 15:04:54

LEG

ok sans problème ..Passe un bon week end
@+

#555 Re : Programmation » crible en python » 05-05-2018 14:10:21

LEG

Il y a longtemps que tu m'as convaincu et rassuré... j'ai compris ta modif..

Est ce que le criblage selon le principe d'Eratosthène que je t'ai expliqué plus Haut t'as convaincu...et son fonctionnement ..
il est clair qu'aucun Matheux, n'ayant étudié ce crible de Goldbach , car je l'ai découvert il y a une dizaine d'année, lorsque je m'intéressais à cette conjecture ..j'étais plus penché sur le crible Eratosthène que j'avais aussi construit mod 30 selon ce même principe en 2002...


je voudrai quand même que tu arrives à comprendre le fonctionnement du crible une fois que les j de pfam et positionné dans p8 = Dico= les 8
familles . avec pfam (0) et les 8 famille 30k +1 ou P[7;29]

ligne (0): c'est celle de 1 et des 7 premiers  soit :
Dico={1:0,7:1,11:2,13:3,17:4,19:5,23:6,29:7} qui sont remplacé par des [1]

Tu as pi=7 ; R = 4  pour :n = 1500 , . Chaque ligne augmente de 30.ok Ce qui va te donner les 8 j pour la pfam n° 0

ta pfam(0)=:
[151  , 67  , 11  , 193  , 137  , 109  , 53  , 179]

peux tu placer tes 8j dans les 8familles... et cribler modulo 7 par pas de 7 "ce qui correspond à modulo 210 c'est à dire par pas de 210 entre deux valeurs d'une même famille ou même colonne"

je place la première valeur de j 151 dans sa famille 1[30] et je crible mod 7 (par pas de 7) une seule fois...je n'oublie pas de changer le 1 en 0., (c'est ce que fait l'algorithme de Goldbach, ("Eratosthène modulo 30"), mais dans les congruences '"ou dans les multiples de P avec l'autre crible Ératosthène.").)

[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1] équivalent à [1 . 7 . 11 . 13 . 17 . 19 . 23 . 29] 8 colonnes = 8 fam [30]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1] <..............>[31.37. 41 . 43 . 47 . 49 . 53 . 59]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[0 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[0 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]
[1 . 1 . 1 . 1 . 1 . 1 . 1 . 1]

à toi pour les 7 autres j dans leur famille modulo 30 c'est à dire tu vas cribler par pas de 7 en partant de la valeur de j relatif à cette pfam (0), dans chacune des 8 familles.
En fonction de l'ordre de Dico = {1:0,7:1,11:2,13:3,17:4,19:5,23:6,29:7}

#556 Re : Programmation » crible en python » 05-05-2018 12:03:07

LEG

Quant au pas, c'est ton incr...

Voyons déjà si tu es satisfait de mon explication...
@+

le pas tu entends bien criblage modulo pi*30 par famille ..?

extraits pour cribleG7y_mod30 et cribleG6:

RESTART: E:\Documents\conjecture de Goldbach\cribleG7y_modulo30 avec D_C - Copie.py
Donnez la valeur de n = 30k : 15240000000
Phase d'initialisation: 74.63053107261658 seconds ---
Famille de chaque Pi: : 4.882808446884155 secondes ---
Criblage des (1) familles: 74.19473052024841 seconds ---
Extraction des premiers n à 2*n : 29.75025248527527 seconds ---

**  79936681 nombres trouvés en 183.4583225250244 secondes **

Avec G1-G6
Donnez la valeur de n = 30k : 240000000
CribleG1_mod30 : Initialisation: 0.37440037727355957 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 0.031200408935546875 seconds ---
CribleG1 mod30 : Criblage des (1) familles: 1.419602394104004 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 0.6240010261535645 seconds ---
On a 1524751 nombres premiers
>>>
>>>
==== RESTART: E:\Documents\conjecture de Goldbach\cribleG1_par Famille.py ====
Donnez la valeur de n = 30k : 15240000000
CribleG1_mod30 : Initialisation: 24.570043087005615 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 3.541206121444702 seconds ---
CribleG1 mod30 : Criblage des (1) familles: 115.8458034992218 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 37.59606575965881 seconds ---
On a 79936681 nombres premiers

pour ta demande:

= RESTART: E:\Documents\conjecture de Goldbach\cribleG6_modulo30 avec D_C.py =
Donnez la valeur de n = 30k : 240000000
CribleG6 mod30 : Initialisation: 2.9172050952911377 seconds ---
CribleG6 mod30 : Famille de chaque couple R et Pi: 0.10920023918151855 seconds ---
CribleG6 mod30 : Criblage des 8 familles: 11.637620449066162 seconds ---
CribleG6 mod30 : Extraction des premiers n à 2*n : 4.94520902633667 seconds ---
On a 12194880 nombres premiers
>>>
= RESTART: E:\Documents\conjecture de Goldbach\cribleG6_modulo30 avec D_C.py =
Donnez la valeur de n = 30k : 480000000
CribleG6 mod30 : Initialisation: 5.694010257720947 seconds ---
CribleG6 mod30 : Famille de chaque couple R et Pi: 0.4680008888244629 seconds ---
CribleG6 mod30 : Criblage des 8 familles: 24.258042812347412 seconds ---
CribleG6 mod30 : Extraction des premiers n à 2*n : 9.812417268753052 seconds ---
On a 23558892 nombres premiers

CONCLSIONS/ils vont pratiquement aussi vite en temps globale ce qui veut dire qu'ont peu aller boire un coup à ta santé et pour ton travail....
je me doutais que le post au dessus aller te faire bondir "avec une famille"...LOLLLLLL
C'est super
@+++

#557 Re : Programmation » crible en python » 05-05-2018 11:42:14

LEG
yoshi a écrit :

Re,

Je regarde tes questions...
J'ai l'impression que tu n'as pas vu le post #154 où j'ai encore gagné du temps... SI je l'ai copié, et modifié pour ne travailler que sur une fam...

Quant au pas, c'est ton incr...

Voyons déjà si tu es satisfait de mon explication...
@+

le pas tu entends bien criblage modulo pi*30 par famille ..?

extraits pour cribleG7y_mod30 et cribleG6:

RESTART: E:\Documents\conjecture de Goldbach\cribleG7y_modulo30 avec D_C - Copie.py
Donnez la valeur de n = 30k : 15240000000
Phase d'initialisation: 74.63053107261658 seconds ---
Famille de chaque Pi: : 4.882808446884155 secondes ---
Criblage des 8 familles: 74.19473052024841 seconds ---
Extraction des premiers n à 2*n : 29.75025248527527 seconds ---

**  79936681 nombres trouvés en 183.4583225250244 secondes **
je reviens

#558 Re : Programmation » crible en python » 05-05-2018 11:17:23

LEG

il fonce à donf...
RESTART: E:\Documents\conjecture de Goldbach\cribleG7y_modulo30 avec D_C - Copie.py
Donnez la valeur de n = 30k : 240000000
Phase d'initialisation: 0.40560054779052734 seconds ---
Famille de chaque Pi: : 0.031200170516967773 secondes ---
Criblage des 8 familles: 0.8424015045166016 seconds ---
Extraction des premiers n à 2*n : 0.4836008548736572 seconds ---

**  1524751 nombres trouvés en 1.762803077697754 secondes **
>>>

#559 Re : Programmation » crible en python » 05-05-2018 10:28:07

LEG

tu as modifié ce bloc, par rapport à G6 , qui te fait perdre du temps , car en principe la phase criblage est très rapide car
tu marques les cellule modulo pi donc plus Pi est grand, plus le programme accélère :
marquer par famille toutes les pi=7 cellules est plus long que de les marquer toutes les pi=15491.... donc attention lorsque tu modifie le criblage....tu as 8 000 000 de cellules par familles, à cribler....


#ON CRIBLE LES 8 COLONNES AVEC CHAQUE FAMILLE DE pi
    start_time = time.time()
    lenpfam = len(pfam)
    for i in range(lenpfam):
        pi=p[i]
        for j in range(8):
            index = (pfam[i][j] - p8[j])//30
            while index < nbcell:
                nombres[j][index] = 0
                index += pi
 

#560 Re : Programmation » crible en python » 05-05-2018 10:13:25

LEG

Bon la marche va être rapide:

voici ton résultat
Donnez la valeur de n = 30k : 240000000
CribleG6 mod30 : Initialisation: 2.8704051971435547 seconds ---
CribleG6 mod30 : Famille de chaque couple R et Pi: 0.12479996681213379 seconds ---
CribleG6 mod30 : Criblage des 8 familles: 11.74682092666626 seconds ---
CribleG6 mod30 : Extraction des premiers n à 2*n : 4.945208549499512 seconds ---
On a 12194880 nombres premiers

Parfait , ce cribleG7, permettra au moins de cribler par famille , en décalant l'ordre de Dico={ 7,0 puis etc..,29:7} et on change la valeur de range(8) en range(1) dans les 3 lignes for in range(1)  tu iras beaucoup plus loin et cela permet de faire une analyse sur la densité de premiers q, de n à 2n , par famille ..etc etc pour les Matheux...de plus avec ce crible ils n'auront aucun mal à démontrer le corollaire du TNP
[tex]\pi{(2n)}-\pi{(n)}[/tex] que l'on peut nommer  [tex]\pi{(G)}[/tex] vaut environ lorsque n tend vers l'infini , [tex]\frac{n}{Ln 2n}[/tex] mais ça n'est pas le plus important...actuellement ...de toutes les façons c'est triviale...

Revenons à ton programme cribleY_mod30
perte de temps dans l'extraction des nombres premiers , j'ai eut le même cas et j'ai modifié  la fin du programme


  [b]premiers.sort()[/b]
    return premiers

n = int(input("Donnez la valeur de n = 30k : "))
[b]nb = len(cribleG6_mod30(n))[/b]
print("On a "+str(nb)+" nombres premiers")
 

dans le crible G4 que tu avais refait ...dans tous les criblesG j'ai remis cette fin...

pourquoi tu perds du temps dans le criblage...?
lorsque ce bloc est sollicité , que fait il exactement

r=nn%pi
        debut,fin,pas=r+pi*(1-r%2),1+r+pi*29,pi*2
        for j in range(debut,fin,pas):

1) il calcule les r de 2n%pi ok...
ensuite que fait il  ??  dans les deux lignes qui suivent :

je suppose qu'il va chercher R relatif à son pi
et ensuite il va traiter les j jusqu'à ...pi*29 ....comment exactement..? je met la liste des j pour n=150 de G6 avec R=6 Pi=7, en dessous :

il perd du temps dans cette ligne ...en principe puisque la fin du programme ne change pas par rapport à G6 ;
c'est à dire qu'il range les j dans leur Famille puis il crible J +pi*30 par famille pour ensuite revenir chercher le J suivant cribler la deuxième famille en partant de j et +pi*30 ....etc afin que le criblage se fasse modulo pi * 30 additivement..

et une fois fini les 8fam ,jl retourne chercher Pi, et R suivant ...ok...? il a fait 6+7 = 13 tu remarque ras que l'on aurait pu faire
wile j<= R +pi*29 ce qui évite de traiter 223...mais aucune importance.
#13 masqué par le progra...
27
41
55
69
83
97
111
125
139
153
167
181
195
209
223
@à toi

#561 Re : Programmation » crible en python » 05-05-2018 06:30:52

LEG

voila une méthode en exemple : que je faisais  pour une pfam: n=1500,Pi==7;  2n%pi = 4

4+7 = 11 puis modulo 7*30 ....<= 1500 famille 11 criblée.
11 +2*7 = 25 =5m pas bon incr +14 = 39 = 3m, +incr 53 %9 == 8 ok + 210....<1500 famille 23 criblée.
53 +14 = 67, %9 == 4 ok +210.....<1500 famille 7 criblée
67 +14 = 81 = 3m pas bon,+ incr = 95 =5m pas bon  +incr =109 %9==1 ok + 210 ...< 1500 famille 19 criblée
109 +14 = 123 = 3m. +incr = 137 %9 ==2 ok +210 ...<1500 famille 17 criblée
.
.etc.etc famille 11 et 29...ok

179 + 14 = 193 %9 = 4 ok  +210...<=1500 dernière famille ==13, Criblée..

retour à Pi == 11, 3000%11 ==8; on réitere ("modulo 330")

8 +11 = 19 %9 ==1, ok +330 ....<=1500 famille 19 criblée
19+2*11 = 41%9==5 ok +330 ...<1500 famille 11criblée
41 + 22 = 3m +22 = 85 +22 = 107 %9 ==5 ok + 330....< 1500 fam 17 criblée
107 + ...etc..etc.
.
.
239 +22 =....etc 283 % 9==4 ok +330...<1500 dernière fam 13 criblée

retour à Pi suivant...etc ...fin du criblage pour n =1500

comptes des valeurs ("congrues à 3000 [Pi]") SANS LES DOUBLONS ce qui pose problème car il faut trier.... pour le bon résultat ... Il ne faut pas oublier, qu'un entier peu être congru de façon unique à l(ordre près de ses facteurs...! ce qui veut dire qu'un congruent aura plusieurs facteur P ....comme un produit...

Mais si tu positionnes les pfam dans le tableau des 8 famille puis à partir de leur position tu crible modulo Pi*30 additivement, et bien tu repassera sur des valeurs qui sont déjà en place donc écrasées ; et dans ce cas plus de Doublons ..c'est pour cela que j'utilise les [1] et [0] moins de place pas d'erreur...et aussi rapide,  car c'est du comptage modulo Pi , selon le principe d'Eratosthène...

En définitive c'est aussi simple qu'Eratosthène, mais en utilisant les congruences...
@+

#562 Re : Programmation » crible en python » 05-05-2018 05:28:21

LEG

Bonjour Yoshi:
pour les deux réponses c'est bon..., car il te suffit de calculer tes 13, pfam < = 1500.

Comme je ne sais pas "encore" comment ton programme va cribler ensuite, à partir de pfam(0) , R =4 , et avec Pi = 7,: il te faut cribler modulo 210 = Pi*30;  le reste de tes entiers congru à 3000 [7]. C'est à dire, le programme ajoute aux 8 valeurs de pfam(n) Pi *30, et pour chacune de tes 13  pfam... ok...

("ce que je faisais avec excel, dans les tableaux que je joins, en dessous de ta citation") :

[151, 67, 11, 193, 137, 109, 53, 179]   reste attendu : 4
............  4 , 4,    4,    4 ,  4   , 4  ,  4 ,  4

tableau excel: crible des congruent de  7, modulo 210 pour pfam(0) <= 1500

    P8 =     1      7      11      13      17      19      23     29   Pi = 7 R=4

pfam(0)=..+  (Pi*30 = 210)

.....[151  , 67  , 11  , 193  , 137  , 109  , 53  , 179]
    361   277    221    403    347    319    263    389   
    571    487    431    613    557    529    473    599   
    781    697    641    823    767    739    683    809   
    991    907    851    1033    977    949    893    1019   
    1201 1117    1061    1243    1187    1159    1103    1229   
    1411    1327    1271    1453    1397    1369    1313    1439   
    [..................1481........................................]    limite n= 1500

tableau excel: crible des congruent de  11, modulo 330 pour pfam(0) <= 1500

   P8 =     1      7      11      13      17      19      23     29   Pi = 11 ,R = 8

pfam(1) +  (Pi*30 = 330)

[151    217    41    283    107    19    173    239
481    547    371    613    437    349    503    569
811    877    701    943    767    679    833    899
1141    1207    1031    1273    1097    1009    1163    1229
1471    ......    1361    ..... ..1427    1339    1493    ....... ]  limite n= 1500

dans ton programme une fois pfam(n) établi, tu programmes pour qu'à partir de pfam(n) il ajoute Pi *30 wile <= 1500; d'où il criblera modulo Pi*30 additivement,  pour les 13 Pi et les 13 pfam...ça va déménager...Lolll

Cela évite de compter les cellules, par famille modulo Pi, afin de changer les cellule [1] en [0] qui sont les congruents de Pi...Valeurs que tu n'auras plus qu'à compter, pour connaître le nombre de premiers de n à 2n.

Avantage, tu soustraits ces valeurs à 3000 et tu à les nombres premiers q, sans avoir à les reconstruire à partir d'une cellule [1] ce que tu peux programmer en fin de programme ...et il te sort directement les nombres premier q ....("tu as les p et les q"..bon je sort..)

Inconvénient, les valeurs prenne plus de mémoire que les 1...

Pour info , il y a une méthode mais qui doit être ch...., à programmer , c'est de copier le masque des Pi cellules et de le recopier Pi ligne en dessous pour les 8 colonne jusqu'à la limite de la dernière ligne (50 pour n=1500) "c'est ce que je fais dans excel manuellement ça évite de compter..."...

#563 Re : Programmation » crible en python » 04-05-2018 19:24:46

LEG

Es-tu capable de justifier que, quel que soit le n choisi multiple de 30, tu obtiendra toujours le bon nombre de premiers entre n et 2n ?

c'est trivial est nul besoins de démonstration, car cela revient à dire que si c'était faux il en serait de même du crible d'Eratosthène de 1 à n et si tu veux de 7 à N dans les 8 familles de nos cribles..
ces cribles sont de moi , je les ai construit sur le principe d'Eratoshène
Eratosthène rappel : Pi <= sqrt de n ;   je part de 2, je marque les mulitples de 2 tous les deux nombres puis 3, n'est pas marqué donc premier, je barre les mulitples de 3, tous les trois nombres...5 n'est pas marqué, donc premiers , je marque les 5m tous les 5 nombres...etc jusqu' sqrt de n

Et tu me demandes si j'ai bien barré tous les multiples de Pi, et si les nombres barrés sont bien des nombres premiers...tu connais la réponse en bon Matheux sans avoir besoin de démonstration depuis + de 2000ans

je peux le faire dans les 8 suites arithmétique modulo30, de premier terme P8[1.7.11.13.17.19.23.29] crible que j'ai construit [nbpremier win] il y a deux méthodes celle que j'utilise dans le cribleG6 ou Eratosthène mod30, par famille..!

cribleG_(n) de 1 à n; principe d'Eratosthène ...idem: Pi <= sqrt de 2n, je part de R  qui est les reste de 2n% Pi Pi[2,3,5,7...sqrt 2n]
j'ai la liste des R  et leurs Pi R(0) et Pi(0) ; R(1) et Pi(1)....

je part du premier reste R(0) que j'ai positionné dans la liste des entier de 1 à n , et la peux importe que R soit pair ou impair...
n=1500 R(0) ==0 Pi(0) ==2 je part donc de 2 et je barre tous les congruents à 2, tous les deux nombre ....> n ("comme Ri= 0, cela revient à barrer les multiples de 2 qui seront tous congrus à 2n modulo 2...!")

R(1) == 0 et Pi(1)==3, idem je part de 3 et je barre tous les cogruent à 3 tous les trois nombres, qui sont les mutiples de 3 ...> n.

R(2) ==0 et Pi(2) ==5 idem tu connais Eratosthène.....> n tu vas me demander si j'ai bien barré les entiers congrus à 2,2 et 5 jusqu'à n.?? où Eratosthène est faux..?

R(3) == 4; et Pi(3) == 7 et bin je part de 4 et je marque tous les congruents à 4 modulo 7,  tous les 7 nombres....>n ("pour faire simple j'appelle ces entiers congruents de Pi==7")

R(4) == 8; et Pi() == 11 et bin je part de 8 et je marque tous les congruents de 11,  tous les 11 nombres....>n

tu as compris ou je continue jusqu'à 53...Je pense que c'est inutile et que l'évidence n'a aucun besoin de démonstration à moins de dire que Eratosthène est faux depuis >2000ans...

Donc tu me demandes en bon matheux, si les [1] qui ne sont donc pas barrés, ("car les barré sont les [0]") sont bien et ce quelque soit n choisi, constitus les nombres premiers q de n à 2n ; tel que 3000 -[1] == q premier pour cet exmple et bien entendu quelque soit n, comme Eratosthène qui donnera tous les entiers qui ne seront pas barré [1] les nombres premiers >1 jusqu'à n quelque soit n ....> vers l'infini...!

Ou Alors tu penses que dans tous tes pfam, en fonction de leurs Pi , il y en aurait : qui ne sont pas congrus à R (modulo Pi)...Je peux te garantir que tous tes pfam son bien congrus à 3000 [Pi] preuve ci-dessus...!


Tu as quand même remarqué, que dans le crible G(n) on utilise 1 car si 1 est marqué [0] 2n - 1 ne peut être un nombre premier...

Comme tout ce qui touche au crible d'Eratosthène et qui ont été prouvé, il en est de Même du CribleG , autrement dit:
la fonction du TNP qui dit que [tex]\pi{(n)}[/tex] vaut (n / ln n) lorsque n....> vers + l'infini , ce qui caractérise le crible d'Eratosthène;

Il en serra de même du cribleG, mais étant donné que l'on utilise les [tex]P_i\leqslant\sqrt{2n}[/tex] la fonction [tex]\pi{(n)}[/tex] devient [tex]\pi{(g)}[/tex] et le corollaire du TNP devient :[tex]\pi{(g)}[/tex] vaut (n / ln 2n) lorsque n....> vers + l'infini , ce qui caractérise le cribleG_(n) en réfèrence à Goldbach..... et le postulat de Bertrand ....je leur laisse, car inutile...!

Cher Yoshi sur ce, bonne nuit @+ demain il fera beau...et on verra la suite de ton algo ...

#564 Re : Programmation » crible en python » 04-05-2018 16:29:37

LEG

1)

Les restes mod p['i] de tous les éléments de chaque pfam['i]  sont
pfam[0]  tous =    4  (r[0])
pfam[1]  tous =    8  (r[1])
pfam[2]  tous =  10  (r[2])
...
pfam[11]  tous = 39  (r[11])

tu calcules les restes de tous ces éléments par les 13 Pi.. mais que veut dire tous = 4 , 8, 10..
je suppose que (r[0]) sont des N° d'ordre...?

P8 =[1,7,11,13,17,19,23,29]

comment à tu exactement obtenue ces nombres ?,  Un exemple avec un élément de pfam == 151 :

pour éliminer les 3m et les 5m, de la liste pfam, qu'ensuite, tu vas tester pour savoir si il sont congrus à 2n modulo Pi donc marqué [0] à la place de [1] dans le programme commun..il y en a 50 par famille, maxi - min = 100 - 50 = 50 testes * 13

tu auras donc 104 éléments ensuite à tester , au lieu 195...mais combien à tu fais de divisions pour supprimer les 3m et les 5m...?
Car à ce stade tu n'as pas encore criblé... Mais on sait que ces 104 éléments tu vas en avoir besoin pour les positionner dans leur famille respective afin de cribler à partir de ces 104 élément.. et si j'ai compris, ensuite tu vas cribler comment (comme modulo Pi additivement par famille avec les 13 Pi....

pfam =

[151, 67, 11, 193, 137, 109, 53, 179],  avec Pi == 7; le reste de 3000 % 7 == 4, 4+7 = 11 et + incr jusqu'à 7*29..== pfam ;cribleG6

.........................................> 151%9 == 7, dans P8 [1] à la position 5 (" 1+5+1 = 7, famille 1 et 150/30 = 5") criblage mod Pi...
.........................................> 67 %9 == 4, dans P8 [7] à la position 2 (" 6+7=13, 1+3= 4,famille 7 et 60/30 = 2") criblage mod Pi

.........................................> 179 %9 == 8, dans P8 [29] à la position 5 (" 1+7 = 8, famille 29 et 150/30 = 5") criblage mod Pi..fin

pfam suivant , on réitère...

[151, 217, 41, 283, 107, 19, 173, 239] : avec 11



[361, 127, 101, 283, 257, 49, 23, 179], :avec 13
[331, 127, 161, 433, 467, 229, 263, 59]
[511, 397, 131, 283, 17, 169, 473, 359]
[631, 217, 401, 493, 677, 79, 263, 539],
[361, 187, 71,  13, 767, 709, 593, 419]
[241, 427, 551, 613, 737, 799, 923, 179]
[151, 817, 521, 373, 77, 1039, 743, 299],
[991,  7,  581,  253, 827, 499, 1073, 89]
[721, 1237, 1151, 463, 377, 979, 893, 119]
[1261, 697, 791, 133, 227, 979, 1073, 509]
[721, 1357, 191, 403, 827, 1039, 1463, 509]

je pense que mon fichier excel va te prendre la tête si tu veux je t'envoie le nouveau lien fichier Word si les explications ci-dessus et le post ci-dessus, ne t'on pas convaincu..Ce qui maintenant, m'étonnerait @ toi...

#565 Re : Programmation » crible en python » 04-05-2018 15:08:42

LEG

Ok : J'ai chargé l'ensemble des Pi que j'allais utilisrr : tous ⩽√2n.
1) n<nb<2n ok nb = 30k+b et tu vas tous les tester avec Pi ce que j'ai bien suivi...

2)

Si aucun reste n'est nul et que j'ai effectué toutes les divisions, alors, j'incrémente le nombre de premiers de 1

Ca veut dire que tu prends le nombres premier Pi suivant,  exemple: le 1er =7, suivant = 11 [......Pi ⩽√2n]

a) Qu'est-ce que Pi ? Ce que moi j'ai noté pi soit p['i] dans ton prog ? le même premier que toi, ci-dessus...(7 ,11....Pi ⩽√2n

b)

alors j=Ri, hein...
    Que représente j exactement ? Qu'appelles-tu Ri ? je dois me reporter au dernier "programme commun" ? R=[nn%pi for pi in p] ?

Ri c'est le reste R tel que  R=[nn%pi for pi in p] , qui ensuite est augmenté de Pi  si R est pair;  il devient j = Ri , Si R est impair augmenté de 2*Pi il devient donc aussi j = Rij..

c)

afin de positionner j = Ri dans une des 8 familles.

oui   dans une des 8 Familles arithmétique de raison 30 , de premier Terme: 1 ou Pi[7;29] soit : dans le programme P8 [1,7,11,13,17,19,23,29] ou dans ton Dico = {1:0,...,29:7}

on positionne ce j = Ri pour indiquer la position de départ du crible avec  son Pi par famille et pour les 8 Familles ...
puis on passera au couple Pi et R suivant soit p=11 et R=8, et la liste des (j = r['i]) <= f.
.

pour n = 1500 p= [7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53] ok

  pour n = 1500  :r (ou R ?) =[4, 8, 10, 8, 17, 10, 13, 24, 3, 7, 33, 39, 32] ok
qui ensuite vont être utilisés ; sont augmenté de Pi si pair ou 2Pi si impair, les fameux j 

 j = r['i]
        f=j+pi*29
        incr = pi*2

r est l'ensemble des restes de 3000 dans la division avec chacun des p['i]... Je ne m'étais jamais posé de questions de fond.

Oui

Et ce sont ces restes que tu traites l'un après l'autre via la variable j et que tu incrémentes de incr=29*p['i] à chaque tour jusqu'à être supérieurs à la limite f = j+29*p['i]...

oui. et non , car j est incrémenté de 2*Pi jusqu'à  la limite f qui vaut j+ Pi*29 ; c'est à dire le premier j tel que R +Pi bien sûr afin de les positionner dans P8[...]

ci dessous : j += incr et incr = 2*Pi

  while j <= f:
            if j%3!=0 and d_c!=5:
                fam =Dico[j%30]
                if pfam[i][fam] == 0:
                    pfam[i][fam] = j
            j += incr
 

cela te donnera 16 j <= f au maximum et pour chaquePi.

Ce qui répond à ta question ci-dessous :

Donc pour j=4 : 4 est pair, tu corriges en j=4+7=11 (oui, 3000%7=4) mais pourquoi ? pourquoi pas une autre valeur multiple de 7 ?
   Quelle est la "philosophie" qui sous-tend ça ?
   Puis tu testes 11 : ni congru à 0 mod 3 ni mod 5... Tu traites..
   Puis que tu aies traité ou  non, tu passes j de 11 (ou autre) à 11 + incr, Pourquoi augmenter de cette valeur précisément ?

dans l'ordre R = 4  et non j je corrige  pour que R + 7 , devienne le 1er j = 11 pour ce Pi =7 , que je vais incrémenter
de 2Pi jusqu'à  f = 11 + 7*29 = 214...
mais pourquoi ? pourquoi pas une autre valeur multiple de 7 ? Mais pour Positionner le départ de 7 dans chacune des 8 Famille de P8...! car c'est 7 qui va cribler pas j , J donne la position de départ de 7 dans chaque famille..

tu passes j de 11 (ou autre) à 11 + incr, Pourquoi augmenter de cette valeur précisément ?
car il te faut bien les 8 positions de départ de 7 , dans les 8 familles , donc il te faut les 8 j que tu obtiens par incrémentation < 214 = f   (" et ce  pour chaque Pi qui criblera")

Puis tu testes 11 : ni congru à 0 mod 3 ni mod 5... Tu traites.. je testes car il faut bien que j=11, soit placé dans sa bonne Famille = 11 ('"modulo 30 additivement")  et ("selon cette fonction ci de-dessous en principe:")
ceci correspond dans l'algorithme à :
(11 - 11) // 30 == 0 d'où position de 7 cellule n° 0, famille 11 car le quotient == 0 ; ou si j = 11%30 == 0 soit dans Dico={11:2} la 3ème famille , quotient ==0, position de 7 nbcell n° 0 cette cellule =[1] se transforme en [0];
Pi  = 7...va donc cribler cette famille , en marquant toutes les 7 cellules [1] en [0] criblage modulo 7 additivement....
on passe au j suivant , que l'on teste...etc.
une fois les 8 familles criblées on passe à Pi =11 qui est le suivant et on réitère tout {" le R les 16j les 8 criblage des 8 familles...) la

 fam =Dico[j%30]
                if pfam[i][fam] == 0:
                    pfam[i][fam] = j
 

(" je crois que j'ai détaillé à la page 3, la progression de j , il positionne 7, et 7 part cribler "sans oublier de transformer les [1] en [0] ")

b) Prenons "au pif" un reste R =1 et son Pi =7....  Pour quelle valeur de n ?
Peu importe, c'est un exemple, qui montre comment on traite les j , à qu'elle famille ils seront affecté, pour : en fonction du quotient"autre méthode" indiquer la position de Pi dans les 8 familles afin que Pi crible ses 8 familles , puis passer au Pi suivant...

Et ce 9, tu le sors d'où ? je l'ai sorti de ma poche "en réserve"
    1%9 = 1   famille 30k+1 là je me dis, pourquoi pas ? bien vue
     Et arrive
     29 %9  = 2  famille 30k+29 = 29 Ah ????....

tu n'as pas tout lu !!! la forme 3k-1, sont les 4 familles {11,17,23,29} qui modulo 9 auront pour reste {2,5 ou 8) ou plus simple additionne les chiffres d'un nombres jusqu'à sa dernière D_c, ex: 29 = 2+9 = 11 ,1+1 = 2,
ou chaque fois que tu obtient 9 soit 0%9  tu annules le 9; d'où 29 = D_c == 2. donc famille 29 [30] car il se termine par 9 si cela avait eu pour reste {1,4 ou 7} et bien cela aurait été la famille 19[30] (principe de la preuve par 9 ..
{"Oubliée depuis des lustres. que j'utilise toujours de tête"}

je te répond pour la fin de ton post @+

#566 Re : Programmation » crible en python » 04-05-2018 10:48:58

LEG

Je na sais pas si vraiment tu as compris que dans le CribleG1..ou..6 ,

On ne fait au Max, pour les 8 Familles, 16 divisions par Pi, afin de positionner j = Ri dans une des 8 familles le reste ensuite c'est à dire le criblage c'est du comptage  principe Eratosthène mais par Famille, donc obligatoirement modulo Pi*30 ie, modulo P par familles...!
Dans cet Ex ci dessous , le minimum serait 14 divisions , si les deux dernier j serait 3m ou 5m ...

On  ne tient pas compte des Restes pairs
Prenons au pif un reste R = 1 et son Pi = 7 et criblons au fur et à mesure les j != D-c == 5,
Donc avec D_c = [1,3,7,9] et D_c == 5  "serra sauté" on passe au suivant

puis on teste  %9  sachant que :

["les 4 familles 3k+1, %9 == {1,4,7} donc P8 ou Dico = (1,7,13,19) ]

[et les 4 familles 3k-1  %9 == {2,5,8} donc P8 ou Dico = (11,17,23,29)]

De ce fait les multiples de 3 ne peuvent pas être pris en compte sans avoir déjà besoins de faire les 16 divisions par 3....

je peux énumérer les 15j puis retourner au début et tester..ce n'est pas une obligation car je peux le faire au fur et à mesure..

Ri = J

1,   %9 = 1 famille 30k+1 " sous réserve" flag == 0, j est positionné dans P8 =1, je mod P = 7 additivement , puis retour à j suivant

15    d_c== 5  j suivant

29   %9  = 2 famille 30k+29 = 29 " sous réserve" flag == 0; j est positionné dans P8 =29, je crible P = 7, puis j suivant

43  %9  = 7 famille 30k+13  ("flag == 0; j est positionné dans P8 =29, je crible P = 7, puis j suivant)

57   %9 = 3m j suivant

71  %9  = 8 famille 30k+ 11 ("flag == 0; j est positionné dans P8 =11, je crible P = 7, puis j suivant)

85  D_c == 5 m suivant

99   %9 = 3m suivant

113 %9  = 5 famille 30k+23 ("flag == 0; j est positionné dans P8 =23; je crible P = 7, puis j suivant)

127  %9 = 1 famille 30k+7 ("flag == 0; j est positionné dans P8 =7; je crible P = 7, puis j suivant)

141 %9  = 3m suivant

155  D_c == 5 suivant

169 %9  = 7 famille 30k+19 ("flag == 0; j est positionné dans P8 =19, je crible P = 7, puis j suivant)

183 %9  = 3m suivant

197 %9 = 8 famille 30k+17 ("flag == 0; j est positionné dans P8 =29, je crible par addition mod P = 7.. Break
-------fin,
je retourne à la liste P et je réitère ....

fin des tests, comptabilité des "flag== 1" ou des nbcell=[1]...!

#567 Re : Programmation » crible en python » 03-05-2018 20:19:09

LEG

Ben on dirait que tu testes comme Eratosthène modulo P et non modulo P*30 car dans range "range" "il y a une limite de K qui va augmenter"
ligne 8:  K=[k*30 for k in range(k_min,k_max)] tu fais l'inverse, c'est à dire que tu prends le nombre de K, qui ensuite seront de la forme nb=30k+ajout , et qu'en fonction  de ta liste de Pi, tu va tester ces nb  un par un par les P qui ont été énuméré ; à savoir si il sont congru à 2n modulo P si oui (" je suppose flag == 0 donc ce i est transformer en 0, sinon flag == 1 , puis tu continues ta boucle avec i +=1 donc le suivant... et à la fin break tu sorts..") donc tu progresses modulo P...non???

dans notre crible, lorsque P crible, en partant de sa position dans chacune des 8 familles il crible modulo P*30 (additivement), car il compte les cellules donc les [1] par famille...exemple famille 30k+7 je représente sur une ligne :

n= 480. énumération de  P = [7;11;13;17;19;23; et 29]

1 ,1 ,1,1,0,1,1,1,1,1,1,0,1,1,1,1,max =15*30 + 7
7 +k*30................................ max= 457

premier test avec P = 7 et son reste R = 1  J = Ri, je progresse j + 2*p ..qui va donner 127. je n'ai fait que des additions  sauf pour le calcul du reste R....

Je place 127 = cellule n°4 la 5ème, et à partir de cette position, je compte 7 cellules, je marque la marque d'un 0, terminé pour cette famille avec p =7 .
j'ai bien criblé modulo 210 par addition...! sans faire de division.....!

toi dans cette famille tu testes 16 nombres pour savoir ce qui sont congrus à 2n modulo pi , avec chacun des Pi de ta liste énuméré P énuméré......?
donc 16 divisions dans cette famille....

alors que p= 17.19.23. et 29  ("même 13, dont le reste = 11 sa position serra 11+26=37; donc, position n° 1 et 1+13 marquera la cellule n° 14 point barre , Pi suivant et son R.. sans faire de division...")

les autres ne peuvent en faire aucune puisqu'il n'y a que 16 cellules....! C'est à dire 16 nombres = 30k +7 soit : [7.37.67.97.......457.]

Mais surtout je pense que même en criblant par  par Famille ça n'apportera rien...

la ligne   

K=[k*30 for k in range(k_min,k_max)]

dans le crible G et une grand importance avec la ligne Dico ={} ou P8 =[]...

Tout ça , sous réserve que j'ai bien interprété le fonctionnement de ton programme....Mais dis moi si tu crible modulo Pi *30....par famille
car si tu cribles les nombres30k + ajout , alors tu ne peux pas cribler modulo Pi*30....!
dort bien....
@+++

j'avais oublié :

Donnez la valeur de n = 30k : 1500000
CribleG6 mod30 : Initialisation: 0.04680013656616211 seconds ---
CribleG6 mod30 : Famille de chaque couple R et Pi: 0.0 seconds ---
CribleG6 mod30 : Criblage des 8 familles: 0.04680013656616211 seconds ---
CribleG6 mod30 : Extraction des premiers n à 2*n : 0.04680013656616211 seconds ---
On a 102661 nombres premiers

0+0+0+0 '' = 0'',1 10ème . Va à 23 mds ...LoLLLL

et pour la famille 30k+7 :

Donnez la valeur de n = 30k : 1500000
CribleG1_mod30 : Initialisation: 0.0 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 0.015599966049194336 seconds ---
CribleG1 mod30 : Criblage des 8 familles: 0.031200170516967773 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 0.0 seconds ---
On a 12827 nombres premiers

#568 Re : Programmation » crible en python » 03-05-2018 17:53:33

LEG
yoshi a écrit :

Salut,

Voilà, j'ai réalisé mon criblage naïf modèle 8 familles (mon code est très ramassé) et il fonctionne,

@+

tu n'as pas mis le code...pour qu'on regarde en commun moi le criblage et toit le programme...

#569 Re : Programmation » crible en python » 03-05-2018 17:51:36

LEG
yoshi a écrit :

Salut,
J'ai donc de quoi phosphorer : pourquoi ton code est-il si rapide ?
La réponse, qui ouvre un grand chantier, est : parce que j'ai beaucoup trop de tours de boucles...
@+

c'est presque le temps faut à G1 pour 23 000 000 000....Loll
regarde : je pense que la limite se situe sur mon pc à 24 000 000 000:

il y a beaucoup d'enseignement à en tirer ...Déjà le postulat de Bertrand il y a au moins un nombre premier entre n et 2n, rime à rien...autant dire qu'il y a une goute d'eau dans l'océan...

tu vois que le criblage est linéaire et ce, quelque soit la famille choisie...

pourquoi ce crible est si rapide, déjà il ne travaille que dans des suites arithmétique de raison 30 donc il progresse modulo Pi*30 car si tu regarde le cribleG_(n) qui lui , comme Eratosthène classique, travaille dans l'ensemble des entiers naturels à partir de 1...il progresse modulo Pi...soit 30 fois moins vite...lorsque Pi = 500 000, et ben il fait des sauts de 15 000 000 ...

est que tu positionnes ta limite  j < f où f = Pi*29
ton calcul des reste R 2n%Pi à quel moment tu le fais dans le crible...car ça conditionne le temps de criblage .

tu dois : Etape A)
1) limite n ,
2) avoir la liste des Pi < sqrt de 2n ("eratosthène") ou répertoire de donné que le programme va aller chercher en fonction de sqrt de 2n,
3_) ensuite tu as dans l'ordre soit tu établi tes j = ri comme tu l'as fait dans G1 ..mais en prenant au fur et à mesure chaque Pi, puis calule du reste R , calcul des 15j à partir de R +Pi si pair ou R+2Pi si impair..
ensuite teste , position dans sa famille , criblage , retour au j suivant,  réitère : teste position criblage...les 8 familles criblées avec ce Pi.
retour au Pi suivant et tu réitères...à la fin comptabilite des [1]

ou:
Etape B)
tu calcules  après l'étape 1) et 2)
tous les restes R ce que tu as fait au début dans G1 ...pourquoi ? il te faut à chaque fin de criblage des 8 famille avec Pi aller chercher à nouveau le Pi suivant, et le R suivant....le reste ensuite ne changera pas ..
preuve: regarde les temps linéaires du criblage..

ensuite la vrai raison tu as été bon et tu as bien compris ce que mon crible devait faire et deux têtes pensantes peuvent donner de très bon résultats....preuve ci dessous...

tu as G1, si cela t'amuse dans l'étape A) fait le cacule des R après avoir été chercher Pi, au fur et à mesure du criblage des 8 familles et compare les temps en plus avec G1 tu sélectionne le criblage que d'une famille...


==== RESTART: E:\Documents\conjecture de Goldbach\cribleG1_par Famille.py ====
Donnez la valeur de n = 30k : 23400000000
CribleG1_mod30 : Initialisation: 198.29194831848145 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 15.92762804031372 seconds ---
CribleG1 mod30 : Criblage des 8 familles: 180.46111679077148 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 59.264504194259644 seconds ---
On a 120565878 nombres premiers
>>>
==== RESTART: E:\Documents\conjecture de Goldbach\cribleG1_par Famille.py ====
Donnez la valeur de n = 30k : 23700000000
CribleG1_mod30 : Initialisation: 205.35876083374023 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 17.59683084487915 seconds ---
CribleG1 mod30 : Criblage des 8 familles: 182.567120552063 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 63.66371178627014 seconds ---
On a 122046948 nombres premiers
>>>
==== RESTART: E:\Documents\conjecture de Goldbach\cribleG1_par Famille.py ====
Donnez la valeur de n = 30k : 23910000000
CribleG1_mod30 : Initialisation: 299.7545266151428 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 24.13324236869812 seconds ---
CribleG1 mod30 : Criblage des 8 familles: 184.96952486038208 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 71.94732642173767 seconds ---
On a 123083742 nombres premiers
>>>

#570 Re : Programmation » crible en python » 03-05-2018 15:01:33

LEG

Je te joint ton crible modifié pour la circonstance :" réglé sur le criblage de la famille 30k+7.


import os
import math
import time


def eratostene(n):
    n = int((2*n)**0.5)
    m = (n-1) // 2
    b = [True]*m
    i = 0
    p = 3
    premiers = [2]
    while p*p < n:
        if b[i]:
            premiers.append(p)
            j = 2*i*i + 6*i + 3
            while j < m:
                b[j] = False
                j = j + 2*i + 3
        i += 1
        p += 2
    while i < m:
        if b[i]:
            premiers.append(p)
        i += 1
        p += 2
    return premiers[3:]

def cribleG1_mod30(n):
    # INITIALISATION
    start_time = time.time()
    nbcell,nn = n//30,n*2
    nombres = [[1 for _ in range(nbcell)] for _ in range(1)]
    p = eratostene(n)
    r = [nn%pi for pi in p]
    p8 = [1,7,11,13,17,19,23,29]
    pfam = []
    Dico={7:0,1:1,11:2,13:3,17:4,19:5,23:6,29:7}

    # pour ne cribler que 2 fam, changer range (8) en 2 , partout.et l'ordre de dico.
    print("CribleG1_mod30 : Initialisation: %s seconds ---" % (time.time() - start_time))

    # FAMILLES POUR CHAQUE Pi
    start_time = time.time()
    for i,pi in enumerate(p):
        pfam.append([0,0,0,0,0,0,0,0])
        j = r[i]
        f=j+pi*29
        incr = pi*2
        d_c = j%10
        #  si la terminaison du reste est paire on ajoute directement pi et on verifie
        if d_c %2==0:
            j += pi
            d_c = j%10
        while j <= f:
            if j%3!=0 and d_c!=5:
                fam =Dico[j%30]
                if pfam[i][fam] == 0:
                    pfam[i][fam] = j
            j += incr
            d_c = j%10
            #print(j)
    print("CribleG1 mod30 : Famille de chaque couple R et Pi: %s seconds ---" % (time.time() - start_time))

    #ON CRIBLE LES 8 COLONNES AVEC CHAQUE FAMILLE DE pi
    start_time = time.time()
    lenpfam = len(pfam)
    for i in range(lenpfam):
        pi=p[i]
        for j in range(1):
            index = ((pfam[i][j] - p8[j])// 30)
            while index < nbcell:
                nombres[j][index] = 0
                index += pi
    print("CribleG1 mod30 : Criblage des 8 familles: %s seconds ---" % (time.time() - start_time))

    # CALCUL DES NOMRES PREMIERS ENTRE n ET 2*n
    start_time = time.time()
    premiers = []
    for i in range(1):
        for j in range(nbcell-1, -1, -1):
            if nombres[i][j] == 1:
                premiers.append(nombres[i][j] == 1)
    print("CribleG1 mod30 : Extraction des premiers n à 2*n : %s seconds ---" % (time.time() - start_time))
    #print(nombres)
    premiers.sort()
    return premiers

n = int(input("Donnez la valeur de n = 30k : "))
nb = len(cribleG1_mod30(n))
print("On a "+str(nb)+" nombres premiers")
os.system("pause")
 

#571 Re : Programmation » crible en python » 03-05-2018 14:56:47

LEG

Re Yoshi , le Mr c'est pour te saluer et remercier sur le travail que tu as fait dans ce crible...

Dans le dico standard, tel celui que j'ai utilisé, tu pourrais écrire
Dico={17:4,7:1,11:2,23:6,13:3,19:5,29:7,1:0}
que ça ne changerait rien...

et pourtant c'est là qu'il y a une partie de la solution , afin de cribler la famille 30k + 1 ou P[7;29] que l'on désir cribler, afin d'obtenir les nombres premiers q de la même forme, de n à 2n .

je veux "on veut" cribler les nombres premier q = 30k + 19 de 300 à 600.

on doit donc cribler la famille 30k+11 de 11 à 300

1) il faut donc changer l'ordre de Dico={1:0....,29:7}

car le crible, va cribler dans l'ordre des famille qui lui ont été établi avec p8[1,7.....29]

l'ordre de Dico, devient: Dico={11:0,1:1.....,29:7} peut importe l'ordre de la suite après 11:0...il ne va cribler qu'une famille 30k + n [1;29]

2) il faut donc changer range(8) en (1) de partout où il est sollicité. en commençant par l'initialisation, la ligne:

nombres = [[1 for _ in range(nbcell)] for _ in range(1)]

résultat:
Donnez la valeur de n = 30k : 600
CribleG1_mod30 : Initialisation: 0.0 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 0.0 seconds ---
CribleG1 mod30 : Criblage des 8 familles: 0.0 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 0.0 seconds ---
[[0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]]
On a 8 nombres premiers q, de 300 à 600, tel que 600 -[1] = 30k+19

Tu peux vérifier:
la 4ème cellule  la n°3, = 11 + 90 =101 suite arithmétique de raison 30, de premier terme 11....! Et:
600 -101 = 499 ,

"soit 600 se décompose en somme de deux premiers...LoLLL"

C'était vraiment bête....depuis que je cherche .....

regarde ce que donne le crible maintenant pour 9 000 000 000:

Donnez la valeur de n = 30k : 9000000000
CribleG1_mod30 : Initialisation: 14.227225065231323 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 1.0920019149780273 seconds ---
CribleG1 mod30 : Criblage des 8 familles: 64.38131284713745 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 22.3392391204834 seconds ---

On a 48272991 nombres premiers--- 30k+19, de 9000000000 à 18000000000.

il est simple à partir de ce crible de vérifier et prouver que la densité de premiers entre n et 2n et en moyenne générale la même est infinie...!
car tout simplement le crible, crible de façon uniforme et identique dans les 8 familles,  suivant le principe d'Eratosthène , avec les nombres premiers [tex]P_i\leqslant\sqrt{2n}[/tex]

Donnez la valeur de n = 30k : 12000000000
CribleG1_mod30 : Initialisation: 20.280035495758057 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 1.6224026679992676 seconds ---
CribleG1 mod30 : Criblage des 8 familles: 88.09335470199585 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 29.671252250671387 seconds ---
On a 63579183 nombres premiers...30k+19, de 12000000000 à 24000000000 de la forme 3k+1

Et un dernier pour te Saluer: famille 30k+7 pour les nombres premiers q = 30k+23  de la forme 3k-1

Donnez la valeur de n = 30k : 12000000000
CribleG1_mod30 : Initialisation: 19.063233613967896 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 1.6536030769348145 seconds ---
CribleG1 mod30 : Criblage des 8 familles: 89.10735654830933 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 29.686851978302002 seconds ---
On a 63579248 nombres premiers

Tu peux même utiliser le compteur de temps pour la densité  du nombre de premiers par famille...et faire breveté le principe.....Lolll
la fonction [tex]\pi{(G)}[/tex] qui compte les entiers de 7 à n, non congrus à 2n modulo Pi , vaut lorsque n tend vers + l'infini :[tex]\frac{n}{Ln 2n}[/tex]...

#572 Re : Programmation » crible en python » 03-05-2018 10:19:14

LEG

Bonjour Mr Yoshi.

J'ai enfin trouvé la solution qui était toute simple, comme quoi lorsque c'est simple il faut y penser....

Je ne veux cribler qu'un famille , sur les 8...! grâce à ton idée du dico[1:0,7:1,11:2....etc..,29:7], d'où :
cela crible dans l'ordre :[la 1, puis la 7 puis la 11.....et enfin la 29]

qu'est ce qu'il me fallait modifier dans le programme, pour qu'il ne me crible par exemple que la famille 1 modulo 30 et la 11 modulo 30...?
de sorte que le programme va très vite et plus loin avec la limite n...!

@ à tout à l'heure...

#573 Re : Programmation » crible en python » 02-05-2018 21:08:53

LEG
yoshi a écrit :

Salut,

Tu as une façon de savoir ce qui cloche : facile mais fastidieux...
Tu sors crayon stylo et papiers ou ton tableur préféré, et tu suis pas à pas la procédure que tu as écrite...
La difficulté sera de ne pas faire ce que tu sais être exact, mais être rigoureusement "idiot" mais discipliné et bien faire ce que va faire la machine, en suivant ligne par ligne ce qu'elle fait vraiment...
Ça m'est déjà arrivé de recourir à cette méthode qui n'est pas propre à déclencher des cris d'enthousiasme : je n'y pensais plus...
Ça vient de me revenir.
Si j'ai le temps, le courage, l'envie, j'essaierai aussi demain matin, pour voir...

@+

je l'ai fait sur excel pas à pas  avec mon petit fils je lui montrai au fur et à mesure ce que je faisais mais ensuite le traduire en langage python ou autre pour que le pc le comprenne ça fait deux et de plus tu me l'a fait remarquer un peu plus dans tes posts ça dépend du programmeur...comment veux que je comprenne exactement ce que fait le programme pas à pas ...je sais ce qu'il doit faire...dans l'ordre..mais ça et le langage du programme: c'est un indien qui parle avec les signes à un polonais...

tu vois bien le travail que tu as fait par rapport au crible de départ.. tu as utilisé le dico pour transcrire l'ordre des 8 famille de P8, tu ne t'ai pas planté sinon le résultat du nombre de nombres premier de n à 2n serait faux...tu as même remarqué qu'il était faux pour de petites valeurs...lorsque j'ai trouvé la solution, cela n'avait rien à voir avec ce que je faisais pas à pas et pourtant...quel rapport entre prendre j jusqu'à f et j jusqu'à n..ça va moins vite et faux ...et bien le résultat sur le crible était pas évident...lorsque je prend que la famille congrue à 11 [30] dans excel je crible la 3ème, dans le programme  dico= [  ,11:2 ,  ] quelqu'un qui comme moi ne comprend pas du la programmation , tu me le demande je te dis : et ben c'est 11 divisé par 2 ...

comment veux tu que maintenant je lui demande de ne prendre que la famille 1 et 11 modulo 30, par exemple :
j'écris dico = [1:0,11:2]
dans p8 je met p8 = [1 ,11]  et bien à la fin de la nuit je tourne en rond...
là miracle... il ne sort qu'une famille et pas dans l'ordre bien sûr  et par ce que j'ai supprimé [dico] de partout...car même pas il m'ouvrait la fenêtre... Tout ça pour te dire , mon petit fils qui me disait c'est pas grave si je ne comprend pas le fonctionnement du crible...tu parles...!

pour que le programme aille cribler que deux familles 1 et 11, je ne pense pas qu'il faut mettre p8= [7,13] et dico= [1:0,11:1] parce que peut être que dans  la famille 1 modulo 30, les j seront bien positionné, avec les bonnes valeurs et son Pi criblera bien,  mais je doute fort que la famille 11(mod 30) soit juste...et si on vérifie,  en remettant la valeur des [1]  et ensuite 300 - [1] , ça m'étonnerait que l'on sorte un nombre premier q congru à 19[30]...heureusement qu'on en a pas besoin car inutile   mais les nbcelle[1] qui représente les entiers, doivent être bien marquées .
c'est pareil si avec Eratosthène je crible les multiples de 7, avec pi = 11 , en partant de 7 ....jusqu'à n = 150...

Passe une bonne nuit ...Merci Yoshi....

#574 Re : Programmation » crible en python » 02-05-2018 17:00:48

LEG

[yoshi]Re,

C'est peut-être presque clair pour toi, mais pour moi tu me parlerais chinois que ce serait pareil...

[[1, 1, 1, 1, 0]]

On a 4 nombres premiers

ces 5 nombres sont les 5 premiers nombres de la famille 1 de raison  30 [1,31,61,91,121] le 5ème est marqué 0 car 121 est congru à 300 modulo 7;  donc 300 - 121 ne peut être premier si il était bien paramétré comme ci dessous

tu vois , ce ne sont pas les bon et là je n'arrive pas à trouver le bon paramètre...pour avoir

[[0, 1, 1, 0, 1]

Bin non, je ne vois rien du tout,  :

je reprend : [[0, 1, 1, 0, 1] est bien paramétrer ton crible actuel est le mien G5 donne ce résultat
le premier 0 c'est 1 qui est marqué par le crible donc  0, 300 -1 n'est pas premier..
le 2ème 1 , = 31 , qui n'est pas marqué par le crible..300-31 = q premier
le 3ème 1 , = 61 , qui n'est pas marqué par le crible..300-61 = q premier
le 4ème 1 , = 91 , qui est marqué par le crible..300-11 n'est pas premier.
le 5ème 0 , = 121 , qui n'est pas marqué par le crible..300-121 = q premier

tu vois la différence entre 3 nombres premiers de n à 2n  au lieu de 4 dans G1 que je dois modifier...

Tu veux dire p8=[1,7,11,13,17,19,23,29]

C'est bien ça,  les 8 familles ou suites arithmétiques les premières  valeurs de la ligne N°0 qui augmente de 30 à chaque ligne, mais qui sont représenté par des [[1],.........[1]]

[quote
elif d_c == '1':  # on vérifie 1 et 11
        if j % 30 == p8[0]:
          fam = 0
        else:
          fam = 2
[/quote ] je vais essayer d'intercaller ça dans le programme et ou le modifier afin d'obtenir la bonne ligne [0, 1, 1, 0, 1] pour n = 150

Je ne peux pas t'aider : déjà qu'avec le précédent, j'étais limite, là je ne comprends strictement rien à ton nouveau procédé...
@+

c'est pas grave, tu en as fait déjà énormément et surtout le principale que tu as décrassé, je te suis toujours redevable...
@+

#575 Re : Programmation » crible en python » 02-05-2018 15:53:40

LEG

voila un exemple de la famille 1 [30] le travail et le temps sont exact mais pas le résultat final ...On peut cribler plus loin...

Donnez la valeur de n = 30k : 9000000000
CribleG1_mod30 : Initialisation: 13.400423526763916 seconds ---
CribleG1 mod30 : Famille de chaque couple R et Pi: 0.5772008895874023 seconds ---
CribleG1 mod30 : Criblage de la familles: 66.90951776504517 seconds ---
CribleG1 mod30 : Extraction des premiers n à 2*n : 24.726043224334717 seconds ---
On a 65668177 nombres premiers (# nombre faux car mal paramétré )
Appuyez sur une touche pour continuer...

voila ce qu'il faisait avant que tu décrasses tout...
là, il vérifier les deux familles 1 et 11 mod 30 , puis, 7 et 17 ; 13 et 23 et19 et29

 

elif d_c == '1':  # on vérifie 1 et 11
        if j % 30 == p8[0]:
          fam = 0
        else:
          fam = 2
 

maintenant je ne veux que  la famille 1 ou 11 peut importe même que la 7 , mais une seule , donc actuellement il me fait la famille 1, exemple post ci dessus , mais je n'arrive pas à le paramétrer...

Pied de page des forums