Annonce

Bienvenue sur le site support des ouvrages :
SAS - Introduction au décisionnel : méthode et maîtrise du langage
(1ère édition - épuisée)
SAS - Introduction pratique : du data management au reporting (2ème édition - épuisée)
SAS - Introduction au décisionnel : du data management au reporting (3ème édition - épuisée (hélas...))

la réponse à la question "mais où trouver la 3ème édition ?" est précisée ici


Retrouvez dans ce tiré à part, la préface écrite par Mouloud Dey, Directeur Business solutions et marchés émergents, SAS France,
l’introduction générale ainsi que le plan complet de l’ouvrage

#1 18-05-2016 07:20:31

SAS-SR
Administrateur
Lieu: Université d'Orléans
Date d'inscription: 01-09-2008
Site web

[archive] Le retour de Lisbeth Salander

Lisbeth Salander est de retour et elle n’est pas contente !

Si on poursuit la lecture de Millénium 4, quelques pages après la page 316 qui nous a donné l’occasion de proposer ce sujet des beaux mercredis, on constate que Lisbeth et August continuent de s’amuser avec les nombres premiers.

Cette fois-ci, elle teste les capacités (peu communes) qu’a August de décomposer un nombre en produit de nombres premiers. On apprend ainsi que tout nombre peut être décomposé en un produit unique de nombres premiers (loi fondamentale de l'arithmétique) et que par exemple que 456=2*2*2*3*19, que 18206927=9419*1933 et que 971230541=983*991*997

August fait ça de tête… nous allons, nous, utiliser SAS (quand on n’a pas de tête, on utilise SAS…)

Lors de notre précédent exercice, nous avons proposé un programme qui permettait de trouver en moins de deux secondes (si le programme met plus de deux secondes, changez de PC…) les 100 000 premiers nombres premiers. Nous allons très certainement avoir besoin de ce programme en le modifiant un peu…

Tirons déjà un premier enseignement : le 100 000ème nombre premier, c’est 1 299 709. On doit donc pouvoir décomposer n’importe quel nombre jusqu’à 1 299 709**2 soit 1 689 243 484 681 : tout nombre non premier inférieur à ce nombre est en effet forcément le produit de nombres premiers tous inférieurs à 1 299 709.

Dans le même temps, tout nombre inférieur à 1 689 243 681 que l’on n’arrivera pas à décomposer sera forcément un nombre premier…

Si si… réfléchissez bien…

Tirons 1000 nombres au hasard :

Code:

data decomp;
   do i=1 to 1000;
      x=round(ranuni(51)*1299709**2,1);
      output;
   end; 
run;

Vous n’avez plus qu’à proposer le programme qui, en moins de 1.5 secondes, vous permet de décomposer ces 1000 nombres.

Moins d'une seconde et demi, je le prouve :

Code:

NOTE: There were 1000 observations read from the data set WORK.DECOMP.
NOTE: The data set WORK.DECOMP2 has 1000 observations and 2 variables.
NOTE: DATA statement used (Total process time):
      real time           1.35 seconds
      cpu time            1.38 seconds

Voici ce que vous allez obtenir sur les 10 premiers nombres :

Code:

Obs.               x         resultat

   1    731596252942    2*29*593*21271043
   2    801587416917    3*7*9551*3996527
   3    660561114385    5*379*348581063
   4    387395752651    414629*934319
   5      2924876375    5*5*5*23399011
   6    731687094423    3*3*17*523*9143917
   7    1.1688515E12    1168851472181
   8    196421623822    2*17*17*53*6411883
   9    911338982382    2*3*151889830397
  10    667072339017    3*7*31765349477

Et 1 168 851 472 181 est un nombre premier puisqu’on n’a pas réussi à le décomposer ;-)

La variable RESULTAT est une variable caractère. Prenez pour cette variable une longueur de 90, ça devrait être suffisant…

En passant, saviez-vous que Jakob Philipp Kulik (1793-1863) avait mis 20 ans pour décomposer (à la main) en produit de nombres premiers tous les nombres inférieurs à 100 000 000 ?

C’est ce qui est dit ici : http://villemin.gerard.free.fr/Wwwgvmm/ … storiq.htm

Mais si on fouille un peu, il semblerait qu’en fait, son travail était loin d’être parfait (et qu’il a duré plus de 20 ans)… c’est ce qui est dit ici :
http://www-groups.dcs.st-and.ac.uk/hist … Kulik.html

Avec SAS, en modifiant un peu le programme que vous aurez à rédiger pour la semaine prochaine, il ne faut que quelques minutes (un peu moins de 12...) pour obtenir un résultat parfait dans une table de 99 999 999 observations.

Dans sa tombe, Jacob Philipp Kulik doit se dire qu’il est né trop tôt…

Amusez-vous bien et à la semaine prochaine


Ce sujet est maintenant archivé - seuls les utilisateurs inscrits de www.sas-sr.com peuvent consulter l'intégralité du sujet et les réponses aux questions posées.
pour vous identifier, suivez ce lien
pour vous inscrire, suivez ce lien

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr
Flux RSS