6
I have 2 scripts To and B.
Testing whether a number is prime in the A script The browser freezes with large prime numbers - 9 digits - (e.g. ).
I tested in Chrome and IE, both browsers frozen.
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>
I don’t know where you get it that they perform the same amount of iterations. There’s an exponential difference. One rotates almost a billion times and the other less than 30,000 times. Interestingly the second is less efficient in the case of not being cousin since it continues iterating even knowing the answer.
– Maniero
@bigown the amount of iterations is different, but the amount of loops is really equal. Each algorithm only has one
for
;)– Oralista de Sistemas
@Renan is true, I played loops as interactions :)
– Maniero
@Leocaracciolo troque
isPrime = false;
forreturn false;
– Oralista de Sistemas
@bigown predicted the comment of friend Renan :)rs
– user60252