Retourner à la page d'accueil de TJS

Script premier : Détermination des nombres premiers

Edition 2 | Chapitre 5 : Les mathématiques / Page 88

Exécution du script

Emulation de la console

Code source

<html>  <head>    <title>Nombres premiers</title>  </head>  <body><h1 id="monH1">Calculs de Nombres premiers avec BigInt et Number</h1><div id="demo"></div><script type="text/javascript">/* AVEC LE TYPE NUMBER */// Initialisation du tableau des nombres premiersvar premiers=[2];/* Est-ce que n est un nombre premier ? */function isPremier(n) {  let racine = Math.round(Math.sqrt(n)+1); // Racine carrée de n  // Boucle sur tous les nombres premiers déjà identifiés  for (let i=1; i < premiers.length; i++) {    let j = premiers[i];  // j = ième nombre premier déjà trouvé    if (n % j == 0) {       // Le reste de la division de n par j est 0      // donc n est divisible par j : n n'est pas premier      return false;     }    if (j > racine) {       // On a dépassé la racine carrée de n       // Tous les divisibles possibles sont passés      // on sort de la boucle      break;    }  }  return true; // n est donc premier si pas trouvé de divisible avant}// Traitement principal des premiers de 1 à nbfunction getPremiers(nb) {  console.time("getPremiers("+nb.toLocaleString()+") avec Number");  // Boucle sur i commençant à 3 jusque nb en évitant les nombres pairs  for (let i=3; i < nb; i += 2) {    if (isPremier(i)) {        // Si i est premier, on l'ajoute au tableau premiers      premiers.push(i);     }    }  // Affichage du temps de traitement et du tableau des premiers  console.timeEnd("getPremiers("+nb.toLocaleString()+") avec Number");  console.log(premiers.length+" nombres premiers trouvés jusque "+nb);  console.log("Plus grand trouvé = "+premiers[premiers.length-1]);    console.log(premiers);}// AVEC LE TYPE BIGINTvar bigPremiers=[2n];/* Est-ce que n est un nombre premier ? */function bigIsPremier(n) {  // Racine carrée de n : il faut repasser par Number   let racine = Math.round(Math.sqrt(Number(n))+1);   // Boucle sur tous les nombres premiers déjà identifiés  for (let i=1; i < bigPremiers.length; i++) {    let j = bigPremiers[i];  // j = ième nombre premier déjà trouvé    if (n % j == 0) {             // Le reste de la division de n par j est 0      // donc n est divisible par j : n n'est pas premier      return false;     }    if (j > racine) {       // On a dépassé la racine carrée de n       // Tous les divisibles possibles sont passés      // on sort de la boucle      break;    }  }  return true; // n est donc premier si pas trouvé de divisible avant}// Traitement principal des premiers de 1 à nbfunction bigGetPremiers(nb) {  console.time("getPremiers("+nb.toLocaleString()+") avec BigInt");  // Boucle sur i commençant à 3 jusque nb en évitant les nombres pairs  for (let i=BigInt(3); i < nb; i += BigInt(2)) {    if (bigIsPremier(i)) {        // Si i est premier, on l'ajoute au tableau premiers      bigPremiers.push(i);     }    }  // Affichage du temps de traitement et du tableau des premiers  console.timeEnd("getPremiers("+nb.toLocaleString()+") avec BigInt");  console.log(bigPremiers.length+" nombres premiers trouvés jusque "+nb);  console.log("Plus grand trouvé = "+bigPremiers[bigPremiers.length-1]);    console.log(bigPremiers);}  function premier(nb) {  premiers=[2];  bigPremiers=[2n];  getPremiers(nb);      bigGetPremiers(BigInt(nb));}premier(10);</script><div id="vider" class="bouton" onclick="premier(10)">getPremiers(10)</div><div id="vider" class="bouton" onclick="premier(100)">getPremiers(100)</div><div id="vider" class="bouton" onclick="premier(1e5)">getPremiers(10 000)</div><div id="vider" class="bouton" onclick="premier(1e6)">getPremiers(1 000 000)</div><div id="vider" class="bouton" onclick="getPremiers(1e7)">getPremiers(10 000 000)</div><p></p><div id="vider" class="bouton" onclick="console.clear()">Vider la console</div><style type="text/css">body {    font-family: helvetica;}div.bouton {    display:inline-block;    background-color: #316AC5;    color:#fff;    font-weight: bold;    border: 2px solid #316AC5;    border-radius: 5px;    padding:4px;    padding-left:10px;    padding-right: 10px;    margin:4px;    cursor: pointer;}div.bouton:hover {    background-color: #fff ;    color:#316AC5;    }</style></body></html>

Nouvelle édition Tout JavaScript chez Dunod

Tout JavaScript le livre chez DunodEn savoir plus
Sortie le 21 octobre

Version papier à 29€90
Format électronique à 22€99.

Commandez en ligne

Chercher une fonction, un objet, ...

Le graph des objets JavaScript



Chargement
en cours...
Le 24/07/2021 22:36:13 sur php7 en 51.53 ms