2 è un numero primo eh..
i numeri primi di 12 sono 2 e 5
così come i numeri primi di 100
13 è un numero primo perchè divisibile per 1 e per se stesso
14 lo scomponi in 2 e 7 che sono tutti e due numeri primi
ecc...
comunque per il crivello di erastotene, che avevo proposto prima dell'edit (non so se hai letto), c'è bisogno di un array in cui salvare i fattori della scomposizione trovati per controllare di non ripetere questi fattori se già presenti. altrimenti non credo ci siano altri metodi.
se invece non è un problema ripetere i fattori della scomposizione, allora il codice che ti ho scritto in C puoi usarlo tranquillamente e riscriverlo in javascript