Así que estoy codificando algo en p5.js para verificar si un número es primo o no. Aquí está la función:
function prime(n) { let P = true; for (let i = 2; i <= sqrt(n); i++) { if (n%i == 0) { P = false; break; } else { P = true; break; } } return P; } Todo funciona bien, excepto los bits i <= sqrt(n) y if(n%i == 0) ...
El operador % te da el resto de a/b , pero cuando escribo:
primo ( entero que termina en 5 )
en la consola, devuelve true , cuando debería devolver false .
Entonces, quiero agregar una codición de que si el último dígito de n es 5, return false . ¿Cómo puedo hacer eso?
¡Gracias!
Aquí está el código de trabajo para el número primo
function prime(n) { var sqrtnum=Math.floor(Math.sqrt(n)); var prime = n != 1; for(var i=2; i<sqrtnum+1; i++) { // sqrtnum+1 if(n % i == 0) { prime = false; break; } } return prime; }Simplemente elimine la palabra clave break en la otra parte de su código.
function prime(n) { let P = true; for (let i = 2; i <= Math.sqrt(n); i++) { if (n%i == 0) { P = false; break; } else { P = true; } } return P; } console.log(prime(25)?"prime":"not prime")Hay muchas optimizaciones que podría implementar aquí. Por ejemplo, podría excluir todos los números pares de su ciclo de prueba. Esto es solo un comienzo. El tamiz de Erastóstenes proporciona orientación sobre futuras mejoras.
function prime(n) { if (!n%2) return false; for (let i=3;i<=Math.sqrt(n); i+=2) if (n%i == 0) return false return true } [47,48,1005,234,239].forEach(n=> console.log(n,prime(n)))En esta variación del guión, el número en realidad se descompone en sus divisores de números primos:
function decomp(n) { const comp=[]; if (n%2==0) return [2,...decomp(n/2)]; for (let i=3;i<=Math.sqrt(n); i+=2) if (n%i==0) return [i,...decomp(n/i)]; return [n]; } function notPrime(n){ const comps=decomp(n); return comps.length>1?comps:false; } [47,48,1005,1001,234,239,4968417].forEach(n=> console.log(n,notPrime(n)))