Décomposer un nombre en nombre premiers

Soyez le premier à donner votre avis sur cette source.

Vue 1 884 fois - Téléchargée 351 fois

Description

Un N plus unième inutilitaire qui traîne sur mon PC depuis l'an 2000 pour calculer des nombres premiers suivant le crible d'Eratosthène et permettre la décomposition d'un nombre en nombre premiers.

Comme c'est en javascript, c'est super lent. A noter le système de formulaire permettant de choisir au départ le nombre premier maximum à tabuler.

C'est entièrement gratuit, alors amusez-vous bien.

N.B. Mettez les 2 fichiers au même niveau. Ca marche aussi bien en local sur un disque dur qu'en mode distant sur un serveur web.

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

William VOIROL
Messages postés
264
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
10 juin 2019
-
Bonjour,

J'ai essayé le code présenté.
Voici quelques remarques:

a) 1 (un) n'est pas premier selon la définition habituelle !!!

b) En entrant 5'000'000 comme valeur initiale, j'ai entendu 15 minutes (montre en main) pour voir apparaître la liste de nombres premiers jusqu'à cette valeur.

c) Une fois la liste calculée, l'entier à décomposer est limité à la valeur initiale.

d) Ensuite, en entrant 4'500'000 pour en obtenir sa décomposition en facteurs premiers, Firefox a planté.

e) En consultant Nombres premiers, on constate qu'il y existe des algorithmes (en Javascript) qui calculent les nombres premiers <= 10'000'000 en moins d'une seconde.

f) Avec par exemple CycleOut dans Nombres premiers, on obtient la liste des nombres premiers <= 5'000'000 en moins de 2 secondes.

g) Le codes suivant:
<!DOCTYPE html>
<html><head>
  <title>Décomposition en facteurs premiers</title>
  <script>
    function Fac(val) {
      var div=2, nb=parseInt(val,10),s='<br>'+nb+' = ', mul='';
      if (isNaN(nb)||(nb<=1)||(nb>=9007199254740992))
        {alert('nombre incorrect !'); return;}
      while (nb>=div*div) {
        var i=0;
        while (nb%div==0) {nb/=div; ++i;}
        if (i>0) {s+=mul+div; mul='•';}
        if (i>1) s+='<sup>'+i+'</sup>';
        ++div; // ou:  if (div<3) div=3; else div+=2;
      }
      if (nb>1) s+=mul+nb;
      document.getElementById('out').innerHTML+=s;
    }
  </script>
</head><body style='background-color:yellow'>
  Entrez un nombre entre 2 et 9007199254740991 (= 2<sup>53</sup>-1) :  
  <input type='text' id='inp' onchange='Fac(this.value)'/>
  <br/><div id='out'></div>
</body></html>
montre qu'il n'est pas nécessaire de d'abord calculer une liste de nombres premiers pour obtenir instantanément la décomposition d'un nombre même entre 2 et 9007199254740991.

h) La remarque "Comme c'est en javascript, c'est super lent" me semble ici inappropriée.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.