求质数

什么是质数

1. 什么是质数

数学定义:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

2. 质数仅能被1和其本身整除,即2到num-1的数都不能被质数整除
3. 代码实现
// 基本代码实现
function isPrime(num) {
  // 小于等于1的自然数不是质数
  if ( num <= 1 ) return false

  // 2到num-1的数都不能被质数整除
  for (let i = 2; i < num; i++) {
    if ( num % i === 0 ) {
      return false;
    }
  }
  return true
}
console.log(isPrime(2))

第二种实现方式isPrime:

// 一个数的两个因数,左边的因数小于等于这个数的开平方,右边的因数大于等于这个数的开平方
// 比如16 开平方为4,它的因数有1*16、2*8、4*4
// 2是最小的质数

function isPrimePromote(num) {
  if ( num <= 1 ) return false
  
  // 取开平方数
  let sqrtNum = parseInt(Math.sqrt(num))
    
  for (let i = 2; i <= sqrtNum; i++) {
    if (sqrtNum % i === 0) {
      return false
    }
  }

  // 是质数会返回true
  return true
}

console.log(isPrimePromote(2))

求1000内的质数

// 求1000以内所有的质数
function getPrimes() {
  let resArr = []
  for (let j = 2; j <= 1000; j++) {
    if (isPrime(j)) {
      resArr.push(j)
    }
  }

  return resArr
}
getPrimes()

也可以封装称为一个类

class Prime {
  constructor(num) {
    this.num = num
  }

  // 判断是否为质数, 此num非构造函数中num
  isPrime(num) {
    if ( num <= 1 ) return false
    
    let temp = parseInt(Math.sqrt(num))

    for (let i = 2; i <= temp; i++) {
      if (num % i === 0) {
        return false
      }
    }

    return true
  }

  // 获取质数
  getPrimes() {
    let result = []

    for (let i = 2; i <= this.num; i++) {
      if (this.isPrime(i)) {
        result.push(i)
      }
    }
    
    return result
  }
}
posted @ 2021-01-03 20:27  ☀大胃王  阅读(50)  评论(0)    收藏  举报