I'm translating a function I've wrote in Python to Javascript but In JS I have an infinite loop while in Python everything works fine.
Here's my code in 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 primes
Here's my code in 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;
}
In Python, when I call the function getPrimes(n)
it correctly returns an array containing the first n
prime numbers.
But in Javascript, the same function causes an infinite loop.
Why is that happening? Thank you in advance.
It's not causing infinite loop, your isPrime(num)
function just returns false
for every number, because you are having i <= num
, which causes num % num == 0
evaluating to true
and returning false
. Just fix it to 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]