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

Mathématiques Discussion :

Explication test de primarité AKS


Sujet :

Mathématiques

  1. #1
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 044
    Points : 2 241
    Points
    2 241
    Par défaut Explication test de primarité AKS
    Bonjour,

    Je viens vous demander un peu d'aider concernant la compréhension d'un algorithme fonctionnel. Mais je ne comprend pas certaines parties, ce n'est pas le code mon problème mais les mathématiques qui sont derrières tout ça.
    C'est un test de primarité que j'ai récupérer dans un algorithme de génération de nombre primaire avec AKS en C++.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    bool IsPrime(unsigned int nbr)
    {
        //2 est le seul entier pair premier
        if(nbr == 2) 
            return true;
        //Tous les nombres inférieurs à 2 et pair ne sont pas premier
        if(nbr < 2 || isEven(nbr)) 
            return false;
     
        const unsigned int iMax = sqrt((float)nbr) + 1;
        unsigned int i;
        for (i = 3; i <= iMax; i += 2)
        {
            if (nbr % i == 0)
                return false;
        }
        return true;
    }
    Voila, je ne comprend pas à partir de la racine carré puis ensuite, la boucle...

    Quelqu'un pourrait me renseigner?

    Merci beaucoup par avance.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Suppose que tu trouves un nombre b qui divise ton nombre N et qui soit supérieur à sqrt(N)+1. Alors N = b*c. Que peux-tu dire sur c?

  3. #3
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 044
    Points : 2 241
    Points
    2 241
    Par défaut
    La j'en ai aucune idée.
    Je ne comprend pas pourquoi sqrt(N)+1? Qu'est que ça donne de spécial? la racine carrée de ce nombre +1?
    ça me donne un multiple de mon nombre mais vu qu'il est impaire, il seras tronqué car mis dans un entier. et pourquoi + 1? ça pour moi c'est un peu comme chercher à résoudre l'équation du tout que Einstein cherchais...
    Je ne vois pas , je pourrais le voir si je comprend ce qu'est la racine carrée d'un nombre impaire + 1.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    En fait il faut prendre comme limite sqrt(N) et non sqrt(N)+1. (le test sur sqrt(N)+1 est inutile).

    Je cite l'explication wikipédia :
    si N = pq alors soit p≤sqrt(N) soit q≤sqrt(N)
    Donc l'un au moins des 2 diviseurs est inférieur à sqrt(N), donc si tu trouves un diviseur plus grand que sqrt(N), cela veut dire qu'il existe un autre diviseur inférieur à sqrt(N) or tu es censé avoir déjà testé les entiers inférieurs à sqrt(N).

  5. #5
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 044
    Points : 2 241
    Points
    2 241
    Par défaut
    Ah! très bien! Merci énormément pour tes lumières magelan!
    Donc ce qu'il fait, c'est tester tout les diviseurs plus petit que sqrt(N).
    En testant tout les nombres inférieurs à cette valeur, il sera en mesure de savoir si la relation est vrai? Si jamais il ne trouve pas de diviseur plus petit, cela voudrais dire que aucune des deux conditions suivantes n'est possible et que donc N n'as pas de diviseur possible, autre que 1 et bien sur lui même c'est ça?

    Mais pourquoi incrémente-t-il de deux? Est ce parce que un nombre impair ne peut pas être divisé par un nombre pair sans avoir de reste? si simplement?

    On vas y arrivé

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par Astraya Voir le message
    Ah! très bien! Merci énormément pour tes lumières magelan!
    Donc ce qu'il fait, c'est tester tout les diviseurs plus petit que sqrt(N).
    En testant tout les nombres inférieurs à cette valeur, il sera en mesure de savoir si la relation est vrai? Si jamais il ne trouve pas de diviseur plus petit, cela voudrais dire que aucune des deux conditions suivantes n'est possible et que donc N n'as pas de diviseur possible, autre que 1 et bien sur lui même c'est ça?

    Mais pourquoi incrémente-t-il de deux? Est ce parce que un nombre impair ne peut pas être divisé par un nombre pair sans avoir de reste? si simplement?
    Oui et oui. Aucun nombre impaire (dans l'ensemble des entiers naturels) ne peut être divisé par un nombre pair.

  7. #7
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 044
    Points : 2 241
    Points
    2 241
    Par défaut
    OK très bien merci beaucoup.
    Une dernière question cependant, il s'agit bien ici du test de primarité AKS? et non pas un autre? Merci

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je suis ce sujet depuis le début, mais maintenant j'ai un doute.
    D'après le contexte, pour "test de primarité AKS", j'avais traduit "test de nombre premier".
    Mais maintenent, je n'en suis plus sûr.
    La définition d'un nombre premier est qu'il n'est divisible que par 1 et par lui-même, dans l'ensemble des nombres entiers.
    Ce qui justifie que à part 2 qui est entier et pair, aucun autre nombre pair de peut être un entier. Ensuite, la limitation de la recherche se fait à sqrt(N) parce que le diviseur éventuel de N ne peut pas être plus grand que la racine carrée de N, comme il a été expliqué.
    Donc, ma question, quelle est la définition de la primarité AKS.

  9. #9
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 044
    Points : 2 241
    Points
    2 241
    Par défaut
    Bonjour,
    Voila la documentation officiel rendu par les 3 indiens sur leurs travaux :
    http://www.cse.iitk.ac.in/users/mani...y_original.pdf
    page 4, il y a l'algorithme qui ressemble à ce que j'ai donné mais je ne suis pas sur de ça parfaite reproduction.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je ne vois très bien le rapport.
    Je n'ai pas tout lu, mais apparemment il s'agit bien de trouver si un nombre est premier ou pas, mais je ne pense pas que votre code soit une traduction de l'algorithme décrit dans l'article.

    L'algorithme type boucle jusqu'à la limite de la racine carré, celui-ci est beaucoup plus sioux.

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Je confirme, ce n'est pas la méthode AKS, je n'avais pas vraiment fait attention au fait que tu voulais la méthode AKS.

    La méthode de ton algo est une méthode naïve : en gros tu tests toutes les divisions possibles (en excluant d'office les nombres paires et les nombres supérieure à sqrt(N)). Donc c'est une méthode très lourde dès que les nombres sont un peu grand.

Discussions similaires

  1. Besoin d'explication pour test dans script Bash
    Par Jipété dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 27/10/2014, 12h45
  2. Réponses: 10
    Dernier message: 27/01/2010, 20h17
  3. est-ce quelqu'un a une explication pour ce test bizzare
    Par sniper_marra dans le forum Langage
    Réponses: 1
    Dernier message: 15/08/2008, 11h19
  4. Explications de code test-simple.c
    Par allergen dans le forum gtksdl
    Réponses: 2
    Dernier message: 10/10/2007, 09h08
  5. Explication d'une instruction de test
    Par ToTo13 dans le forum C
    Réponses: 8
    Dernier message: 07/02/2007, 17h02

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