Ayuda con un script para números primos

A ver si alguien me lo desmenuza un poco porque no entiendo cómo funciona :oops:

function llenarMatriz(){
       var primo;
       var lista = 0; 
       var arrayPrimos = new Array();
       var a = prompt ('Introduzca el primer numero '); 
       var b = prompt ('Introduzca el segundo numero ');
     
       for(var i=Math.min(a,b);i<=(Math.max(a,b));i++){
           primo=1; 
     
           if(i==0 || i==1) 
           {
               arrayPrimos[lista]=i;
               lista++;
           }else{       
           for(var j=2;j<i;j++){ 
               if(i%j==0 ){
                   primo=0;
                   break;
               }
           }
               if(primo==1)
               {
                   arrayPrimos[lista]=i; 
                   lista++;
               }
           }
     
       }  
       document.write(arrayPrimos);
    }
	llenarMatriz();

No entiendo sobre todo que, sentando que primo=1:
if(i==0 || i==1)
entonces:
arrayPrimos=i;
lista++;

...y luego repita que si primo==1, entonces
arrayPrimos=i;
lista++;

¡Pero si es lo mismo que se expuso antes! :confused: :confused:

En fin, agradezco cualquier ayuda. Un saludo.
Hola:

Se sabe que 1 es primo (el 0, hasta donde sé, no), por ende

if(i==0 || i==1) {
  arrayPrimos[lista] = i; // Añade i al arreglo
  lista++; // Avanza el índice del arreglo
}

simplemente comprueba si i es 0 o 1 y, de serlo, lo añade al arreglo.

...y luego repita que si primo==1, entonces
arrayPrimos=i;
lista++;

No es lo mismo... Un número primo es aquel que puede ser dividido únicamente por 1 y por si mismo, o sea, si se divide por 1, si mismo y por otro número, entonces no es primo. Teniendo en cuenta esto, el script hace lo siguiente:

}else{
           // El for no termina mientras [COLOR="#FF0000"]j[/COLOR] sea menor a [COLOR="#FF0000"]i[/COLOR] asegurándose que i no se pueda dividir por otro número
           // que no sea 1 o si mismo.
           for(var j=2;j<i;j++){
               if(i%j==0 ){ // Si el resto de [COLOR="#FF0000"]i[/COLOR] divido en [COLOR="#FF0000"]j[/COLOR] es igual a 0 (o sea, i es divisible por j)
                   primo=0; // Se cambia primo a 0, indicando que [COLOR="#FF0000"]i[/COLOR] no es primo
                   break;    // Se sale del [COLOR="#FF0000"]for[/COLOR]
               }
           }
               if(primo==1) // Luego de salir del [COLOR="#FF0000"]for[/COLOR], se comprueba si primo es 1 y, de serlo, entonces i no era divisible por ningún otro número excepto por 1 y por si mismo
               {
                   arrayPrimos[lista]=i; // Se añade al arreglo
                   lista++;                 // Avanza el índice.
               }
           }

primo es otra forma de un valor booleano, o sea, si cambias primo a true o false, entonces 0 es false y 1 es true. Se entiende?
Sé lo que son números primos, y entiendo cómo funciona esa parte del script, con el módulo == 0.
Pero sigo sin entender el conjunto [:(] En especial, si arriba dice que primo = 1, y en conclusión:

arrayPrimos=i;
lista++;

...por qué repite abajo que si primo ==1, entonces
arrayPrimos=i;
lista++;

Es lo que estipuló antes. No entiendo por qué hay que repetirlo.

Muchas gracias por tu ayuda, maestro. Un saludo [:)]
No se esta repitiendo XD.

primo = 1 es una asignación (lo de la derecha se asigna a lo de la izquierda).
primo == 1 es una comparación

Lo que sí se repite es la adición del nuevo número primo a la lista y, si se hace dos veces, es porque la primera compara si i es 0 o 1 y no se entra al for y la segunda vez es para comparar los múltiplos.
Hum, a ver si me entra en la mollera... :rolleyes:

Otra cosa, ¿qué más da que el menor de los números sea 0 ó 1? ¿Qué diferencia operativa hay entre el intervalo (0,100) y el intervalo (3,100)?

¡Muchas gracias! [:)]
Hum, a ver si me entra en la mollera

Tranquilo, que para eso intentamos ayudar :).

Hmmm solo la diferencia lógica que en el primer caso habrán 3 números extra... aparte de eso, nada (ni siquiera en términos de rendimiento).

En este caso específico, probablemente el ciclo for nunca pase del 9, puesto que si un número no es primo, podrá ser dividido por alguno de los primeros 10 números y por ende, el ciclo nunca pasará de 10.
skaparate escribió:En este caso específico, probablemente el ciclo for nunca pase del 9, puesto que si un número no es primo, podrá ser dividido por alguno de los primeros 10 números y por ende, el ciclo nunca pasará de 10.

¿Te refieres al segundo for?
for(var j=2;j<i;j++)

Lo he probado, y funciona sin problema en todo intervalo que empiece por 0.

De verdad, no sabes lo que agradeco tu ayuda [:)]