2022-07-21

Why is my prime check function returning true on multiples of 5?

I have been testing a prime number generator from a formula I created over two decades ago. It's working, somewhat. However, as I'm testing the numbers it generates, my primeNum function returns true for multiples of 5 that my generator is creating.

let five = 5
let fifteen = 15

const primeNum = (num) => num < 2 ? false : ((num === 2) || num % 2 !== 0) ? true : false

const f = primeNum(f)
console.log(f) // true

const ft = primeNum(ft)
console.log(ft) // true

// same with 25, 35, 45, etc.. 

EDIT / UPDATE: I ended up using Prime factorization and closest divisor.

// Prime factorization
const factors = num => {
  let tmp = num
  let result = {};
  for (let i = 2; i <= num; i++) {
    while (num % i === 0) {
      result[i] = (result[i] || 0) + 1;
      num /= i;
    }
  }

  if(shift(tmp, 2) === tmp || shift(tmp, 3) === tmp) {
    return false
  }
  else if(Object.keys(result).length === 1 && tmp % 3 !== 0) {
    return true
  }
}

// Closest divisor
function shift(number, divisor){
  return number + (divisor - (number % divisor)) % divisor
}


No comments:

Post a Comment