Estoy traduciendo una función que escribí en Python a Javascript, pero en JS tengo un bucle infinito mientras que en Python todo funciona bien.
Aquí está mi código en Python:
def isPrime(n: int) -> bool: # Since neither 1 nor 0 is a prime number, return false if n == 1 or n == 0: return False # Loops from 2 to n for i in range(2, n): # If the number is divisible by i, then n is not a prime number if n % i == 0: return False # Otherwise, n is a prime number return True def getPrimes(n: int) -> list[int]: """ Take a positive int number n as a parameter and prints to the console the first n prime numbers """ primes = [] count = 0 while len(primes) < n: if isPrime(count): primes.append(count) count += 1 return primesAquí está mi código en Javascript:
function isPrime(num) { // Since neither 1 nor 0 is a prime number, return false if (num == 1 || num == 0) { return false } // Loops from 2 to n for (let i = 2; i <= num; i++) { // If the number is divisible by i, then n is not a prime number if (num % i == 0) { return false } } // Otherwise, n is a prime number return true } function getPrimes(num) { let primes = []; count = 0; while (primes.length < num) { if (isPrime(count) === true) { primes.push(count); } count++; } return primes; } En Python, cuando llamo a la función getPrimes(n) , devuelve correctamente una matriz que contiene los primeros n números primos.
Pero en Javascript, la misma función provoca un bucle infinito.
¿Por qué está pasando eso? Gracias de antemano.
No está causando un bucle infinito, su isPrime(num) simplemente devuelve false para cada número, porque tiene i <= num , lo que hace que num % num == 0 se evalúe como true y devuelva false . Solo arréglalo a i < num
function isPrime(num) { // Since neither 1 nor 0 is a prime number, return false if (num === 1 || num === 0) { return false } // Loops from 2 to n for (let i = 2; i < num; i++) { // If the number is divisible by i, then n is not a prime number if (num % i === 0) { return false } } // Otherwise, n is a prime number return true } function getPrimes(num) { let primes = []; count = 0; while (primes.length < num) { if (isPrime(count) === true) { primes.push(count); } count++; } return primes; } console.log(getPrimes(10)) // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]