jueves, 7 de julio de 2016

Generación de números primos en JavaScript

Disponemos de un archivo HTML denominado primos1.html que llama a un archivo primos1.js donde se encuentra el código en JavaScript para generar los números primos: 2, 3, 5, 7, 11, 13, ... hasta el que queramos.

El archivo primos1.html es el siguiente.

 <!DOCTYPE html>  
 <html>  
 <head>  
 <meta charset="UTF-8">  
 <title>números primos en JavaScript</title>  
 <script type="text/javascript" src="primos1.js">  
 </script>  
 </head>  
 <body>  
 <p>Generación de números primos hasta un millón.</p>  
 </body>  
 </html>  


El archivo primos1.js es el siguiente.

 document.write('<h1>'+'Generación de números primos hasta 1.000.000'+'</h1>');   
  var texto=2 + "<br>";       //el 2 es primo, y todos los demás pares no lo son  
  for (var i=3;i<=1000000;i=i+2){  //tratamos solo los impares   
    var primo=true;        //inicialmente un número es primo hasta que no se demuestre lo contrario   
    for(j=3;j<=Math.sqrt(i);j=j+2){ //probamos hasta llegar a la raiz cuadrada de i   
      if (i%j==0){        //si el módulo es cero es que es divisible y por tanto no es primo  
        primo=false;   
        break;   
      }   
    }   
    if (primo) {texto += i + "<br>";}   
  }   
  document.write(texto);  

El resultado tarda en aparecer unos segundos ya que se generan los primos hasta un millón. Puedes ver el resultado en el siguiente enlace.

Con punto de miles

Ahora queremos obtener el listado de los números primos hasta 1.111.111 pero con separador de miles. Es código es análogo al anterior con la novedad de que hemos introducido una función que nos va poniendo los puntos de separación para los miles.

El archivo primos2.html es el siguiente.

 <!DOCTYPE html>  
 <html>  
 <head>  
 <meta charset="UTF-8">  
 <title>números primos en JavaScript</title>  
 <script type="text/javascript" src="primos2.js">  
 </script>  
 </head>  
 <body>  
 <p>Generación de números primos.</p>  
 </body>  
 </html>  


El archivo primos2.js es el siguiente.


 function formatNmb(nNmb){   
   var sRes = "";   
   for (var j, i = nNmb.length - 1, j = 0; i >= 0; i--, j++)   
    sRes = nNmb.charAt(i) + ((j > 0) && (j % 3 == 0)? ".": "") + sRes;   
   return sRes;   
   }   
 document.write('<h1>'+'Generación de números primos hasta 1.111.111'+'</h1>');  
 var texto=2 + "<br>";  
 var primo  
 for (i=3;i<=1111111;i=i+2){  
     primo=true  
     for(j=3;j<=Math.sqrt(i);j=j+2){  
         if (i%j===0){  
             primo=false;  
             break;  
         }  
     }  
     if (primo) {  
     texto += formatNmb(i.toString()) + "<br>";  
     }  
 }  
 document.write(texto);  

El resultado tarda en aparecer unos segundos ya que se generan los primos hasta un poco más de 1.000.000. Puedes ver el resultado en el siguiente enlace.

No hay comentarios:

Publicar un comentario