Pages

04 janvier 2009

Ce nombre est-il bien premier ?

Puisque nous en sommes aux premiers jours de l'année, intéressons-nous pour une fois aux nombres premiers !

Les nombres premiers ont toujours fasciné les mathématiciens. De nombreux programmes ont été écrits pour vérifier si un nombre est ou non un nombre premier. C’est en particulier un cas intéressant à traiter pour illustrer la mise en œuvre de programmes récursifs.

Avec Excel, il n’est pas nécessaire d’écrire un programme pour cela. La formule suivante, que j’ai trouvée sur le site de Chip Pearson, à l’adresse www.cpearson.com/, tient en une seule cellule et fait tout le travail.

Cette formule miracle, entrée en B1, et recopiée ensuite dans les colonnes B, E, H et K, est une formule matricielle, donc validée avec [Ctrl]-[Maj]-[Entrée]. La voici :
=SI(OU(A1=1;A1=2;A1=3);"Premier";SI(ET((MOD(A1;LIGNE(INDIRECT("2:"&A1-1)))<>0));"Premier";""))

Le principe de cette formule est qu’un nombre n est premier quand tous les restes des divisions par les nombres de 2 à n-1 sont non nuls.

Remarque – Notons l’utilisation astucieuse des fonctions ligne et indirect, grâce auxquelles la formule matricielle fonctionne car elle s’applique bien à un vecteur.

Selon l’auteur, cette formule fonctionne jusqu’à la valeur 268.435.455, soit 2^28-1. Si quelqu’un parmi nos lecteurs peut nous expliquer pourquoi dans un commentaire, j’aimerais bien le savoir, et j'aimerais aussi savoir si cette limite demeure avec Excel 2007 !

13 commentaires:

  1. Pour ma part sur Excel 2007, le dernier nombre valide est 1048577, ce qui correspond au nombre de lignes dans un classeur Excel (1048576) plus une. Pour les nombres plus elevés, la formule renvoie #REF, ce qui est normale puisque le vecteur colonne utilisé dans la formule dépasse les capacités d'Excel. Pour 2003, je m'étonne que la formule fonctionne pour des nombres au delà de 65536.

    RépondreSupprimer
  2. Anonyme9:31 AM

    J'ai également fait le même constat. En creusant un peu et en allant voir sur le site de Chip Pearson, en téléchargeant son fichier démo, on peut constater qu'il annonce les limites d'Excel 2003 et 2007.
    Je ne comprend donc pas très bien son commentaire sur la valeur de 2^28-1 ??
    Il y a une incohérence entre ce qu'il dit dans son fichier et dans son commentaire. Peut-être est-ce dû à mon anglais ?

    RépondreSupprimer
  3. Anonyme9:37 AM

    Milles excuses
    J'ai lu son article jusqu'au bout et il explique clairement comment il arrive à 2^28-1, mais ce n'est bien sûr plus du tout la même formule

    RépondreSupprimer
  4. Anonyme11:57 PM

    Bonjour.

    Je n'ai pas analysé la formule indiquée dans l'article de Chip Pearson, peut-être par Fainéantise.

    Par contre un lien sur un article d'une autre formule Excel, pour calculer les nombres premiers.
    http://www.mdf-xlpages.com/modules/smartsection/item.php?itemid=25
    @+Jean-Marie

    RépondreSupprimer
  5. Anonyme12:02 AM

    1 n'est pas un nombre premier mais merci pour la formule.

    PS: elle peut etre allègée en ne vérifiant que les entiers en dessous de la racine du nombre étudié.

    RépondreSupprimer
  6. Anonyme11:34 AM

    Bonjour,
    Pour ma part, ça ne marche pas, exemple : Pour 81 ou 21, il m'indique premier....

    RépondreSupprimer
  7. Alors, mailez-moi votre fichier que je puisse vérifier.

    Dans mon fichier, que les abonnées au blog ont reçu, tout marche bien...

    RépondreSupprimer
  8. Anonyme11:06 AM

    Cette formule affiche uniquement les nombres impairs, pas les nombres premiers: par exemple elle met "premier" en face de 25 qui n'est pas un nombre premier ...

    RépondreSupprimer
    Réponses
    1. Anonyme3:24 PM

      C'est normal, c'est parce que tu as mis tes nombres en 1 colonne.
      il faut faire comme l'exemple, ne pas dépasser 10 lignes et étaler sur plusieurs colonnes

      Supprimer
  9. Si vous aviez fait comme je propose de le faire dans l'article, vous n'auriez pas 25 comme nombre premier, pas plus que je ne l'ai dans la copie d'écran !

    RépondreSupprimer
  10. Anonyme12:30 PM

    Bonjour,
    Y a-t-il quelqu'un pour m'aider? J'utilise Excell 2010. J'ai essayé la formule mais dès la première liste de 1 à 10, j'ai 9 comme nombre premier!!! Ce n'est pas très commode n'est-ce pas?

    RépondreSupprimer
  11. Anonyme5:14 PM

    Je reviens sur ce que j'ai dit à 12:30PM.
    Il faut valider la saisie par [Ctrl]-[Maj]-[Entrée]et non par un simple entrée.
    Mille excuses Professeur!!

    RépondreSupprimer
  12. pour moi la limite est : 65 537 avec Excel 2002

    RépondreSupprimer