如何判断一个数是否为质数

342 阅读1分钟

什么是质数?

指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数称为质数

如何判断?

一个最简单且暴力的判断方法就是遍历2该数之间的所有自然数,如果不存在可以被整除的数,那么该数就是质数

优化一下?

其实并不需要遍历到该数,我们都知道最小的质数是2,那么一个自然数N最大的因数也就是N/2,所以我们只需要遍历到N/2即可,因为我们是要找可以被它整除的数,如果都不是它的因数,那肯定不会被它整除了

再优化一下?

一个数N可以分解为两个因数,最极端的情况就是两个因数相等即N1/2N^{1/2}(后文称之为“中间值”),其他情况就是两个因数分布在“中间值”两边,如果我们判断在2到“中间值”之间都没有存在一个N的因数,那么“中间值”到N之间就更不可能存在另一个因数了

所以我们只需要遍历2到“中间值(包含)”即可

代码实现

function isPrime(N) {
    for (let i = 2; i <= Math.sqrt(N); i++) {
        if (N % i == 0) return false
    }
    return true
}