Script premier : Détermination des nombres premiers

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

Edition 3 | Chapitre 5 : Les mathématiques / Page 88
Exécution du script
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>
Troisième édition Tout JavaScript chez Dunod
En savoir plusSortie le 4 janvier 2023
Version papier 29€90
Format électronique 22€99.
Commandez en ligne Le graph des objets JavaScript
Chargement
en cours...