您好,欢迎来到骅坨科技网。
搜索
您的当前位置:首页JavaScript趣题:质数之差

JavaScript趣题:质数之差

来源:骅坨科技网


质数不是有规律分布的,这从两个相邻质数的差就能得到体现。
2和3相差1,3和5相差2,5和7的确也是相差2,但7和11却相差了4。
乍看之下,你的确找不到规律,事实也是如此。
在2到50之间,我们可以找到如下的相邻的差为2的质数对:
3-5, 5-7, 11-13, 17-19, 29-31, 41-43
很明显,满足上面条件的第一对质数是3-5。
那么,更通用的情况,从m到n之间,差距为g的第一对相邻质数是多少?
函数原型如下:
gap(g , m , n)

例子如下:

gap(2, 5, 7) // --> [5, 7] 
gap(4, 130, 200) // --> [163, 167] 
gap(2, 5, 5) // --> null

请注意,一定要是符合g差的第一对相邻质数。
如果找不到,返回null。
对于这一类和质数打交道的题目,咋们都无可避免地要引入一个判断质数的函数,有时我也不禁YY,要是能把这个函数纳入ECMA标准,那该多爽!
但是考虑到通用性,这个isPrime方法确实应用场景窄了点,不适合绑定在Number.prototype上面,于是就只能一次次地做题目时扒下来粘贴了,汗^_^。
这个题目本身没什么难度,一趟循环,遇到符合条件的质数对就return,没有符合条件的返回null,就这样了!

Number.prototype.isPrime = function(){ 
 var maxFactor = Math.floor(Math.sqrt(this)); 
 for(var i=2;i<=maxFactor;i++){ 
 if(this % i === 0){ 
 return false; 
 } 
 } 
 return true; 
}; 
 
function gap(g, m, n) { 
 var firstPrime; 
 var secondPrime; 
 for(var i=m;i<=n;i++){ 
 if(i.isPrime()){ 
 firstPrime = secondPrime; 
 secondPrime = i; 
 if(secondPrime - firstPrime === g){ 
 return [firstPrime,secondPrime]; 
 } 
 } 
 } 
 return null; 
}

Copyright © 2019- huatuo5.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务