JavaScript求解孪生质数

来源:互联网 发布:淘宝多少销量一颗心 编辑:程序博客网 时间:2024/05/19 13:23

如果2个数都是质数,而且它们相差为2,那么就可以说是一对“孪生质数”。

如何判断指定范围内的孪生质数?

一种高效的做法是结合筛法与缓存判断,可以很接近线性的效率。

用常规的判定质数方法,再使用缓存,也可以达到目的。

效率是ON*sqrtN))的,而且因为缓存的缘故,多次调用的情况下,性能也是很可观的。

下面,我提供了常规实现,具体上还可以优化,比如使用二分查找。

//缓存孪生质数var cache = [[3,5],[5,7]];//是否是质数function isPrime(n){    var factor = Math.sqrt(n);    //最小的质数是2    if(n < 2){        return false;    }    //质数只有1和它本身,2个因子//否则是合数    for(var i=2;i<=factor;i++){        if(n % i == 0){            return false;        }    }        return true;}function twinPrime(n) {//缓存的最后一对孪生质数    var last = cache[cache.length - 1];//如果n在已缓存范围内    if(n < last[0] + 1){//直接返回数目        for(var i=0;cache[i][0] < n;i++);        return i;    }    else{//否则,查找并且缓存        var start = last[0] + 1;        for(var i=start;i<n;i++){            if(isPrime(i) && isPrime(i+2)){                cache.push([i, i+2]);            }        }        return cache.length;    }}


原创粉丝点击