I have 2 scripts A and B .
Testing if a number is prime in script A, the browser freezes with large prime numbers - 9 digits - (eg 777767777).
I tested Chrome and IE, both browsers froze.
In script B, this same prime number does not freeze browsers, in fact it accepts numbers with more digits.
Script A freezes
function primo(num) {
// verifica se o numero digitado é "1", que não é primo
if(num!=1) {
for (var i = 2; i < num; i++)
if (num % i == 0) return false;
return num !== 1;
}
}
function verificaPrimo() {
var num = document.getElementById("name").value;
var resl="";
// verifica se é número
if(!isNaN(num)){
// verifica se é primo
if (primo(num)) {
resl = "O número " + (num) + " é primo";
} else {
resl = "O número " + (num) + " nao éprimo";
}
document.getElementById("mensagem").innerHTML = resl;
} else {
document.getElementById("mensagem").innerHTML = "Vish, nem número é";
}
}
<input type="text" id='name' />
<input type="button" name="botão" id="verificarvalor" value="Verificar" onclick="verificaPrimo()" />
<p id="mensagem"></p>
Script B
function primo() {
var number = document.getElementById("number").value;
if (!isNaN(number)) {
if (isPrime(number)) {
document.getElementById("mensagem").innerHTML = number + " É primo!";
} else {
document.getElementById("mensagem").innerHTML = number + " Não é primo.";
}
} else {
document.getElementById("mensagem").innerHTML = "Só aceita números, volta pra escola";
}
}
function isPrime(n) {
if (n < 2) {return false}
if (n != Math.round(n)) return false;
var isPrime = true;
for (var i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return isPrime;
}
<input id="number" value="0" maxlength="12" size="8" onclick="this.select()" />
<input type="button" value="Verificar" onclick="primo()" />
<p id="mensagem"> </p>