IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Comprendre la méthode de factorisation du crible quadratique : une invention de Carl Pomerance [Tutoriel]


Sujet :

Algorithmes et structures de données

  1. #1
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut Comprendre la méthode de factorisation du crible quadratique : une invention de Carl Pomerance
    Chers membres du club,

    J'ai le plaisir de vous présenter ce tutoriel :


    Cet article vous permet de comprendre la méthode de factorisation du crible quadratique. Vous trouverez dans le fichier joint les codes source en VBA du crible quadratique ainsi que d'autres fonctions utilisées pour la factorisation : le test de primalité Miller-Rabin, le crible d'Ératosthène, la factorisation RhoPollard, l'algorithme Tonelli-Shanks, mais aussi les algorithmes pour les opérations sur les grands nombres (additions, soustractions, multiplications, puissances, divisions, modulos, racines carrées…).
    Bonne lecture

    Retrouvez les meilleurs cours et tutoriels pour apprendre l'algorithmique.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    A quoi ça sert concrètement ?
    Savoir pour comprendre et vice versa.

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour.
    Si la question est à quoi sert le crible quadratique, la réponse est : à factoriser "rapidement" des grands nombres.
    Si la question est à quoi sert cette documentation, la réponse est : à expliquer "simplement" cette méthode de factorisation qui est une référence dans ce domaine.
    Si la question est à quoi ça sert de savoir comment marche le crible quadratique, alors on s'éloigne peut-être de l'algorithmique et l'on s'approche de la philosophie.

    Plus sérieusement, la question mérite en effet d'être posée. J'avoue ne pas avoir la réponse.
    Et pour celles et ceux qui (se) demanderont à Qui ça sert, je peux répondre tout de suite : "je ne sais pas, en tout cas pas à moi."
    Bonne lecture pour les plus curieux d'entre vous.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Qui factorise et pourquoi ?
    Tu dis ne pas avoir la réponse mais peut-être que quelqu'un ici l'a. Je suis curieux pathologique.
    Savoir pour comprendre et vice versa.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Condition d'arrêt
    Bonjour,

    Je n'ai pas compris dans l'exemple du début vous vous arrêtiez une fois arrivé à 51, ou dans le deuxième exemple, pourquoi à 60261, pourriez-vous clarifier ce détail ?

    Merci beaucoup

  6. #6
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Le premier exemple est très simpliste et ne tient pas compte des améliorations possibles. La règle du pivot de Gauss dit que si l'on a au moins autant de lignes que de colonne une solution peut être trouvée.
    60261 est la 7eme ligne sur 7 colonnes (-1 est exclu car non utilisé ici) donc on cherche une solution. Si pas trouvée on ajoutera une ligne. Ainsi de suite.
    La recherche étant chronophage, c'est inutile de la lancer avant d'avoir le minimum de lignes requises, sauf à avoir de la chance.
    Cordialement

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Ah d'accord, on détermine les facteurs à l'aide de la friabilité et de Legendre, puis on arrête de chercher des équations une fois qu'on en a obtenu autant que l'on a de facteurs ?

  8. #8

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Août 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Août 2021
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Simplification par équation du second degré
    Bonjour et merci pour votre article "Comprendre la méthode de factorisation du Crible Quadratique. Il répond d’une façon claire à des questions que je me posais.

    Par contre, je me suis surpris à trouver une simplification, étonnamment simple(équation du second degré), à cette méthode : Il suffit de remplacer le calcul des X²- N par la fonction :

    F(n) = n²-2(X-1) n+ ((X²-N) -2X+1) avec n entier naturel
    On remarque que si on calcule le discriminant (simplifié car b pair)= b'²-ac = ((X-1)²-((X²-N) -2X+1) = N
    Normal, sinon on pourrait calculer directement les facteurs premiers.

    Exemple pour N = 48206621

    X=6944 (racine de N arrondi à l’entier supérieur)

    F(n) = n² + 2(6944-1)n+(12515-2*6944+1) = n²+13886n –1372

    F(1) = 1+13886-1372= 12515
    F(2)=4+2*13886-1372= 26404

    Etc....

    Cette fonction facilite le calcul du crible quadratique :

    Il suffit de calculer la fonction, modulo p (avec p=7,11,19,23,..)- On notera au passage que le test de Legendre sert à éliminer les nombres premiers qui n'admettent pas de racine carrée au discriminant dans p


    exemple p= 11 f(n)mod11 = n²+ 4n +3 d'où b'²-ac = 4-3 =1 d'où les deux racines
    n1 = -b'+1/a= -2+1= -1= 10 mod11
    et n2= -2-1=-3 = 8 mod 11

    p= 7 f(n) = n²+ 5n racine n1 = 0 et n= -5 = 2 mod 7

    P=19 f(n) = n²+16n+15 d'où b'²-ac = 64-15 = 49 n1= -8-7= -15 = 4 mod 19 et n2= -1 = 18.

    Calculer le crible quadratique revient donc à résoudre l'équation du second degré de la f(n) mod(p)=0.

    Peut-être que l'utilisation de cette fonction peut permettre un gain de calcul conséquent.

    Cordialement
    Fichiers attachés Fichiers attachés

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Août 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Août 2021
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Par défaut Simplification par équation du second degré
    P.S. Lire F(n) = n²+2(X-1) n+ ((X²-N) -2X+1) au lieu de F(n) = n²-2(X-1) n+ ((X²-N) -2X+1)

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Août 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Août 2021
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Crible quadratique avec simplification équation du second degré
    Exemple de la cible quadratique obtenu avec N=48206621 en pdf
    Images attachées Images attachées

  12. #12
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Bonsoir.
    J'ai lu attentivement les 2 articles de MR OTT concernant la décomposition de grands nombres en facteurs premiers.
    J'ai donc commencé par l'algorithme ECM (plus facile) que j'ai porté en langage assembleur en suivant la démarche proposée par Laurent OTT.
    Tout va bien pour des petits nombres mais mon programme n'arrive pas à factoriser le nombre 3000004222000029407 alors que l'algorithme rho y arrive en quelques secondes.
    Si quelqu'un à implanté cet algorithme dans un autre langage ou si Mr OTT peut tester en visual basic pour me dire si la factorisation réussi et en combien de passages. Car je pense à une erreur dans mon programme à partir d'une certaine taille de nombre.
    Merci d'avance.

  13. #13
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour.
    Je confirme, votre chiffre peut être décomposé avec l'algorithme ECM, en tout cas ça marche chez moi.
    Il faut faire plusieurs passages. Difficile à dire combien car à chaque passage les variables de départ sont aléatoires. Donc non reproductible.
    D'après mes rapides essais, une cinquantaine de passages.
    Mais c'est parfois moins, parfois plus.
    Il faudrait peut être programmer votre recherche en lui indiquant le temps que vous souhaitez consacrer à l'algorithme, et donc le laisser tourner autant de fois que ce délai n'est pas dépassé. Ou comme j'ai fait, lui indiquer un nombre maximum de passages avant de laisser tomber.
    Ce qui revient au même.
    Bonne programmation.
    Laurent OTT.

  14. #14
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Merci de votre réponse.
    Je vais donc chercher l'erreur dans mon programme.

  15. #15
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Ton programme plante pour 3000004222000029407
    Est ce qu'il donne des résultats corrects pour des nombres un peu plus grands ?
    Dans beaucoup de langages, le traitement des grands nombres est très problématique. Les langages sont bâtis en disant : je sais traiter tous les nombres jusqu'à xxx, mais pas au-delà. Et quand on travaille sur des nombres supérieurs, on a des comportements très étranges. (prévisibles pour les spécialistes, mais étranges pour les novices)
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  16. #16
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Bonjour.
    En effet c'est bien un problème de dépassement de capacité.
    Je n'avais pas fait attention qu'un nombre modulo N peut être très grand quand N devient très grand.
    Merci de vos messages.

Discussions similaires

  1. comprendre les méthodes statiques
    Par yuriyan dans le forum C#
    Réponses: 6
    Dernier message: 26/03/2012, 13h38
  2. comprendre la méthode de skeletisation d'imageJ
    Par Décembre dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 13/04/2010, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo