Crible d'Ératosthène variante sans doublons

Bonjour.
Si je comprends bien le crible d'Ératosthène https://fr.wikipedia.org/wiki/Nombre_premier#Crible_d'Ératosthène_et_algorithme_par_essais_de_division , les nombres premiers sont des nombres qui ne sont pas $P^2_{(k)}+P_{(k)}n,\ \forall n\in \mathbb{N},\ \forall k\in \mathbb{N^*},$ hormis 1.
Ou $P_{(k)}$ représente la suite des nombres premiers.
Ce qui me chagrine est que ces multiples se chevauchent et donc le crible fonctionne plusieurs fois.
Pour avoir un crible plus efficace, je propose.
Définition: Un crible multiples de p non divisible par un nombre inférieur [b]à[/b] p sauf 1.


Exemple. $\forall n\in \mathbb{N^*}.$
$2\times2n$
$2\times2\times3n+(\pm3)$
$2\times2\times3\times5n+(\pm5\text{ ou }\pm5^2)$
$2\times2\times3\times5\times7n+(\pm7\text{ ou }\pm7^2)$
$2\times2\times3\times5\times7n\pm210+(\pm7\text{ ou }\pm7^2)$
$2\times2\times3\times5\times7n\pm210\pm105+(\pm7\text{ ou }\pm7^2)$

Il est possible de réécrire de manière plus conventionnelle ces suites. Mais c'est cette structure en arbre qui m'a permis de trouver ce crible.
J'imagine que ce que j'ai trouvé est trivial.
Je n'ai pas vérifié pour 11, c'est fastidieux à la main mais on voit bien le schéma se dessiner.
On n'est jamais à l'abri d'une asymétrie avec les nombres premiers.

PS: le crible n'élimine pas les $(P_{(k)})^2$ sauf pour $(P_{(1)})^2=4$ et $(P_{(2)})^2=9$.

Réponses

  • Bon ce n'est pas gagné la formule n'est pas satisfaisante.
    Je vois bien qu'il y a une symétrie autour des multiples de $P_{(k)}!$, $P_{(5)}!=2\times3\times5\times7\times11$ mais déterminer à partir de quel nombre commencer ces multiples m'échappe encore.

    J'ai trouvé une écriture plus simple relativement satisfaisante.
    $2n+2$
    $6n+3$
    $30n\pm5$
    $210n+(\pm7\text{ ou }\pm49\text{ ou }\pm77\text{ ou }\pm91)$ Excepté 49, 77 et 91 qui passent à travers le crible mais ne sont pas premier.
    Je déteste les exceptions.
    Il faut aller voir 11 pour espérer voir quelque chose de lisse, compter à la main 2310 pffff.

    La progression du nombre de solutions ressemble à ça https://oeis.org/A006125 $1, 1, 2, 8, 64, 1024,\ldots$
    Ça va donc être chaud d'exprimer les multiples de 11 qui ne sont pas divisible par un nombre inférieur à lui même sans avoir à noircir la feuille.

    En ayant confiance en ce crible et en connaissant la progression du nombre de solutions pour chaque multiples de premier.
    Il est possible d’écrire un algorithme peut être plus performant que le crible d'Ératosthène.
    Malheureusement l'algorithme devient rapidement lourd à cause du nombre de solutions pour chaque multiples premier https://oeis.org/A006125 qui progresse vite.

    Je détaille l'algorithme.
    Je crible avec $2n+2$
    il nous reste les nombres impairs.
    Comme nous savons que le nombre de solutions à notre prochain crible est 1 je prends 1 nombre multiple de 3 qui est passé à travers le crible soit 3.
    J'utilise ce nombre pour compléter le nombre de solutions à notre prochain crible qui est.
    $6n+3$
    Comme nous savons que le nombre de solutions à notre prochain crible est 2 je prends 1 nombre multiple de 5 qui est passé à travers le crible soit 5. Pourquoi 1 et pas 2 ? Car nous avons $\pm$ "je sais c'est tiré par les cheveux"
    J'utilise ce nombre pour compléter le nombre de solutions à notre prochain crible qui est.
    $30n\pm5$
    Comme nous savons que le nombre de solutions à notre prochain crible est 8 je prends 4 nombres multiples de 7 qui sont passés à travers le crible soit 7, 49,77 et 91.
    J'utilise ces nombres pour compléter le nombre de solutions à notre prochain crible qui est.
    $210n+(\pm7\text{ ou }\pm49\text{ ou }\pm77\text{ ou }\pm91)$

    Je répète à l'infini.
    PS: Sans être sûr de mon coup.
    Cordialement.
  • Bonjour
    citation Fly7
    En ayant confiance en ce crible et en connaissant la progression du nombre de solutions pour chaque multiples de premier.
    Il est possible d’écrire un algorithme peut être plus performant que le crible d'Ératosthène.

    Déjà: comment tu vas faire pour éviter les doublons$ > 3*10^{12}$ des nombres premiers $P\leqslant\sqrt{n}$(:P)

    Prends seulement $n = 30 000$ tu penses aller plus vite que ce qui existe déjà pour le crible d'Ératosthène....:)o

    As tu au moins une idée de ce qui existe actuellement, alors que tu est dans l'impossibilité d'écrire ton crible $< 10^9$

    Il faut 28 secondes pour calculer le nombre de nombres premiers $P\equiv{1}[30]$ , $< 300 000 000 000$; c'est à dire un peu moins de 4 minutes pour les 8 familles ...limite: $15,3 * 10^{12}$ environ 8h..sur un PC de 8 Go de ram.

    Et il y a beaucoup plus rapide , avec le crible de H. A. Helfgott et sa méthode du cercle; quant à sa limite, je pense que lorsque tu auras fini d'écrire ton crible, tu serras à la retraite....

    Mais, bon courage....
  • Déjà: comment tu vas faire pour éviter les doublons
    
    Il n'y a pas de doublons dans mon crible.
    alors que tu est dans l'impossibilité d'écrire ton crible
    

    Je n’écris pas le crible, l'algorithme fabrique le crible au fur et a mesure.

    PS: J'ai volontairement poster dans shtam.
    Mon objectif n'étant pas la compétition, juste partager une idée.
  • Fly7 à écrit:
    peut être plus performant que le crible d'Ératosthène.
    c'est bien toi qui parle de performance ?

    pourquoi : Excepté 49, 77 et 91 qui sont passé à travers le crible mais ne sont pas premier. ?

    Du moment que ton crible ne les a pas écrit comme multiple de P, et ben ils sont premiers...

    donc je pose n = 300, limite du crible ...

    on laisse tomber les multiples de 2,3 et 5 pour faciliter..ok ?

    ton crible ou toi va donc écrire à partir de ton produit $2*3*5*7 = 210$ soit, modulo 210

    $210n+(±7 ou ±49 ou ±77 ou ±91)$ comment tu vas écrire les multiples de $P\leqslant \sqrt{300}$ autre que ceux de $P=7$ avec ton prochain produit $210*11=2310$
    2310n + ou -11 .....etc ?
    si ton algorithme est incapable de se construire lui même faute d'instructions, avec $2310n$ ....? d'après tes dires.

    à part les écrire toi même et modulo P ....:)o

    Ou encore modulo $P*30$ = (30*11) - 11.....etc.... (30*13) -13 ; (30*17) -17.....
    c'est et ce sera toujours Ératosthène en plus compliqué et moins performant...Non ?
    Par ce que je suppose quand même, que tu ne vas pas partir de 2310n -11........pour revenir à 121 ...etc ...etc
  • Pourquoi : Excepté 49, 77 et 91 qui sont passé à travers le crible mais ne sont pas premier. ?
    

    Tu va voir que c'est un inconvénient qui va nous servir d'allié.
    Du moment que ton crible ne les a pas écrit comme multiple de P, et ben ils sont premiers...
    

    Non, j'utilise les nombres 7, 49, 77 et 91 pour construire le prochain crible multiples de 7 : $210n+(±7 ou ±49 ou ±77 ou ±91).$
    si ton algorithme est incapable de se construire lui même faute d'instructions, avec 2310n...? d'après tes dires.
    

    J'ai déjà détailler l'algorithme, pas suffisamment bien a voir tes questions.

    Explication de l'algorithme:

    Pour raccourcir, je commence a partir du crible multiple de 5:
    $30n\pm5$
    Les nombres qui passent a travers le crible sont.
    2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41,49, 43, 47, 53, 59, 61, 67, 71,77, 73, 79, 83, 89, 91, 97,...
    J'utilise les 8/2=4 nombres multiples de 7 qui sont passé a travers le crible multiples de 5: pour construire le crible multiples de 7:
    $210n+(\pm7\text{ ou }\pm49\text{ ou }\pm77\text{ ou }\pm91)$
    Les nombres qui passent a travers le crible sont.
    2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 121, 127, 131, 137, 139, 143, 149, 151, 157, 163, 167 173179 181, 187, 191 193 197 199, 209, 211, 223, 227, 229, 233, 239, 241, 251, 253,257, 263, 269, 271, 277, 281, 283, 293 307, 311, 319, 313, 317, 331, 337, 341, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 407,...
    J'utilise les 64/2=32 nombres multiples de 11 qui sont passé a travers le crible multiples de 7 pour construire le crible multiple de 11:
    $2310n+(\pm11\text{ ou }\pm121\text{ ou }\pm143\text{ ou }\pm187\text{ ou }\pm209 etc) $

    Au passage le crible multiple de $P_{(k)}$ permet de connaitre tous les nombres premiers inférieur a $(P_{(k+1)})^2.$
    Bon ça c'est déjà connu je pense mais ça nous permet d' éviter de faire des calculs inutile en mettant une borne a n.
    par exemple si nous voulons trouver les nombres premier inférieur a 49
    Il est inutile d'aller au delà du crible multiples de 5 et d' aller au delà de n =1 pour le crible multiple de 5.

    Après il y a surement des crible plus rapide mais bon il n'existe pas des milliards de cribles non plus.
    Le crible d'Ératosthène na pas été mis a la poubelle depuis qu'il existe des cribles plus performant que je sache.
  • Il est inutile d'aller au delà du crible multiples de 5 et d' aller au delà de n =1 pour le crible multiple de 5.
    pour limite N = 49. c'est bien......

    Et pour aller jusqu'à $N = 3 000 000 0001$ ? tu n'as besoins que de: 7, 49,77 et 91 pour calculer les multiples de 7 avec $210n$ valeur de $n$ ? temps de la performance de ton crible ? :

    ("parce que avec 7 c'est suffisant pour barrer les multiples de 7 sans faire des additions, soustractions, multiplications...inutiles. Il suffit de programmer par pas de 7 depuis $7\rightarrow {N}$ ")

    Puis pour $2310n$ avec 11 ,121 ......$(11*P_k)$ valeur de $P_k$ ; valeur de $n$ et uniquement les 32 multiples de 11 ?

    Car écrire tous les produits à coups d'additions, soustractions et multiplications "inutiles" tu penses que c'est toujours plus performant que d'écrire les entiers naturels > 0 jusqu'à $N$ puis de barrer par pas de $P_k$$<\sqrt{N}$
    même en te limitant aux impairs , voir sans les multiples de 3 et 5....et même 7...en utilisant le modulo 210.etc etc
  • L'avantage de mon crible est d’éviter d'éliminer les nombres qui ont déjà été éliminés.
    Exemple.
    Quant je suis au crible multiple de 3 il est inutile d'éliminer 6, 12, 18, 24... qui sont des multiples de 2 et qui ont déjà été éliminés par le crible multiple de 2.
    Ce qui représente la moitié des multiples de 3 ce n'est pas rien. ""surtout si tu dois compter jusqu’à $N = 3 000 000 0001$""

    Quant je suis au crible multiple de 5 il est inutile d'éliminer.10, 15, 20, 30, 40, 45... qui sont multiples de 3 et de 5 et qui ont déjà été éliminés par les cribles multiples de 3 et de 5.
    Ce qui représente la moitié des multiples de 5 ce n'est pas rien non plus.
    etc...

    Ça fait beaucoup d’opérations inutile à faire en moins je dirais approximativement deux fois plus rapide que le crible d'Ératosthène.
  • Haaaa
    Je viens de trouver une propriété intéressante mais ne sais pas encore comment l'exploiter.
    Exemple:

    7=7
    49=7*7
    77=7*11
    91=7*13


    11=11
    121=11*11
    143=11*13
    187=11*17
    209=11*19
    253=11*23
    319=11*29
    341=11*31


    Ça y est l'idée n'est pas compliquer, continuer de procéder a un criblage minimaliste en évitant de cribler se qui n'est pas nécessaire.
    Non ça c'est déjà fais va falloir chercher autre chose ou pas.

    Par Osiris et par apis ca eu non https://oeis.org/search?q=121,+143,+187,+209,+253,+319&amp;sort=&amp;language=&amp;go=Search
  • Imaginons on recherche tous les nombres premiers srictement inférieurs à 1000

    Step1 : Les nombres qui sont candidats pour être premiers sont 2, 3, 4, 5, ... 999.
    Step2 : on prend le 1er nombre de cette liste, c'est 2. On élimine tous les nombres qui sont le produit de 2 par un élément de la liste. Et on élimine aussi 2 lui-même.
    Reste donc 3,5,7,9,11,13,15,17,19,21,23 .. 999
    On boucle sur ce step2
    Donc : on prend le 1er nombre de cette liste, c'est 3. On élimine tous les nombres qui sont le produit de 3 par un élément de la liste. Et on élimine aussi 3 lui-même.
    Reste donc 5,7,11,13,17,19,23,25,29 .. 999
    Du coup, on ne recense pas tous les multiples de 3, mais uniquement les nombres égaux à 3 multiplié par un élément de cette liste. Il n'y a aucune opération en trop ;

    Puis : on prend le 1er nombre de cette liste, c'est 5. On élimine tous les nombres qui sont le produit de 5 par un élément de la liste. Et on élimine aussi 5 lui-même. On élimine donc 5x5, 5x7, 5x11, 5x13 ; on n'élimine pas 5x9 par exemple, mais ce n'est pas grave, il avait déjà éliminé quand on a traité le nombre 3.

    Reste donc 7,11,13,17,19,23,29, 31,37 .. 999
    L'étape suivante va éliminer 7x7, 7x11, 7x13, 7x17 ...

    Il n'y a aucune opération en trop.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
  • Bonjour
    Ce que j'ai voulu te faire remarquer , c'est qu'il est inutile d'écrire les multiples de 2,3 et 5.
    Donc Ératosthène est limité aux entiers impairs non multiples de 2,3 et 5 , et ton procédé n'est pas rapide , on n'a nul besoins d'écrire tous les multiples de $P_k > 5$ , pour cribler . Y compris pour cribler de N à 2N avec une limite N fixée....

    On part soit du carré de $P_k$ soit du produit de : $P_k * P_n = J$ avec $P_k$ appartenant à {11,13,17,19,23,29,31, et 37} et $P_n$ l'ensemble des nombres premiers $P\leqslant\sqrt{N}$ où $N$ est la limite à cribler.
    ("donc comme tu peux le constater on n'a même pas besoins d'écrire les entiers impairs multiples de 7.....mais ce n'est pas ce qui va faire gagner du temps..")

    ensuite tu travailles modulo $P_n*30$ .

    Exemple si je veux supprimer les multiples de $P_n = 11$ je part de $11^2$, modulo $330$; puis du produit $11*13$ + modulo $(13*30)$ :

    (11*13) + modulo 390.......>N
    (11*17) + modulo 510.......>N
    etc
    13*13 + mod 390....>N
    13*17 + mod 510...>N

    Mais c'est long et peu performant ...D'ailleurs quelque soit le crible d'Ératosthène modifié...
    Par exemple sans les multiples de 7, avec modulo 210;

    11*13 + modulo 2310 ....>N
    11*13 + modulo 2730 ....>N
    etc etc ...mais c'est toujours long....Ce n'est pas parce que tu sauteras, ou évitera les nombres déjà marqué par des opérations de soustraction et additions inutiles, que tu gagneras du temps car tu seras limité en mémoire de stockage sans pour autant aller plus vites....

    On va déjà plus vite modulo $P_n$ par famille arithmétique de raison 30.
    $P_k = 7_1,11_2,13_3,17_4,19_5,23_6,29_7,31_8 $

    le programme construit un tableau de 1 jusqu'à $N//30$ ; puis crible en partant du produit $P_{k1} * P_n = J$ modulo $P_n$ jusqu'à $N$.
    soit il barre les 1 ou change le signe du Bit, ou encore remplace le 1 par 0.

    Puis tu réitères avec $P_{k1} * P_{n+1} = J$.
    une fois tous les $P_n$ utilisé avec $P_{k1}$ ; tu récidives avec $P_{k2} * P_n $
    etc etc ....à la fin tu comptabilises les 1.

    fam 7 = 7,37,67,97, ....N//30
    $[1,1,1,1,.....1 = N//30]$
    $7*31 = J = 217 \equiv {7}[30]$ , puis calcul de l'index de départ $J//30 = 7$ tu pars du 7ème 1 = 217; car tu comptes de: 0,1.2.3.4....7 qui est bien le produit $7*30 + 7 = 217$.
    donc tu cribles part pas de $7\rightarrow\:N$

    extrait du crible :
    Pour N = 6000 mds, nombre de premiers 13 mod 30; 26 422 717 616 en 1 677,97 secondes
    Pour N = 7500 mds, nombre de premiers 13 mod 30; 32 770 358 492 en 2142,95 secondes

    tu vois que même, si on utilisait une méthode encore plus rapide on sera toujours limité par la limite N. la mémoire de stockage etc ....etc...
    Bon courage
Connectez-vous ou Inscrivez-vous pour répondre.