0

I stuck on this task. I would like to show all prime numbers between 1 and given integer. I think the best would be to filter my array of numbers. This is my code:

document.querySelector("#btn109").addEventListener("click", () =>{
  const in109num = document.getElementById("in109num").value;
  const prime = in109num.split(" ");
  const answer109 = document.getElementById("answer109");
    for (let i= 1; i <= prime; i++){
      let primeNumbers =[];
      primeNumbers.push(i)
      answer109.textContent += primeNumbers.filter(numbers => 
        numbers % 3!=0 && 
        numbers % 2!=0 &&
        numbers % 5!=0
        )
    }
});

for example if I type number 11, right now it shows 1 7 11 instead 1 2 3 5 7 11. I tried add to filter numbers equal to 2,3,5 but filter is not generate any numbers:

answer109.textContent += primeNumbers.filter(numbers => 
        numbers % 3!=0 && 
        numbers % 2!=0 &&
        numbers % 5!=0 &&
        numbers == 2 && 
        numbers == 3 &&
        numbers == 5    
        )

How I should change my code?

konrad
  • 64
  • 11

2 Answers2

1

You need a function to determine if a number is prime or not. Try like:

function isPrime(num) {
  for(var i = 2; i < num; i++)
    if(num % i === 0) return false;
  return num > 1;
}


document.querySelector("#btn109").addEventListener("click", () =>{
  const in109num = document.getElementById("in109num").value;
  const prime = in109num.split(" ");
  let answer109 = document.getElementById("answer109");
  let primeNumbers =[];
  let result = [];
    for (let i= 1; i <= prime; i++){        
          primeNumbers.push(i);
          result = primeNumbers.filter(numbers => isPrime(numbers));
    }
    console.log(result.join());
    answer109.value  = result.join();
});
<input type=textbox" id="in109num" placeholder="input a number"></input>

<button id ="btn109">Get Primes</button>
<input type=textbox" id="answer109" placeholder="result"></input>
apomene
  • 14,282
  • 9
  • 46
  • 72
1

You can avoid the for loop doing this:

function isPrime(num) {
  for(let i = 2, s = Math.sqrt(num); i <= s; i++)
    if(num % i === 0) return false; 
  return num > 1;
}

document.querySelector("#btn109").addEventListener("click", () =>{
  const in109num = document.getElementById("in109num").value;
  const prime = Number(in109num.split(" "));
  let answer109 = document.getElementById("answer109");
  let result = [...Array(prime).keys()].filter(numbers => isPrime(numbers));
  console.log(result.join());
  answer109.value  = result.join();
});
<input type=textbox" id="in109num" placeholder="input a number"></input>

<button id ="btn109">Get Primes</button>
<input type=textbox" id="answer109" placeholder="result"></input>

The isPrime function explanation is here.

ricardo-dlc
  • 466
  • 1
  • 3
  • 9