美文网首页
2020-05-18 5 kyu Gap in Primes

2020-05-18 5 kyu Gap in Primes

作者: 苦庭 | 来源:发表于2020-05-19 03:00 被阅读0次

https://www.codewars.com/kata/561e9c843a2ef5a40c0000a4/javascript

My answer / AC

function gap(g, m, n) {
    var between = false;
    for(let i=m; i<=n-g; i++){
      if(isPrime(i) && isPrime(i+g)){
        for(let j=i+1; j<i+g; j++){
          if(isPrime(j)) { between = true; }
        }
        if(between) {
          between = false;
          continue;
        }
        return [i, i+g];
      }
    }
    return null;
}

/*
function isPrime(num) {
  for(var i=2; i<num; i++){
    if(num%i === 0) return false;
  }
  return num>1;
}
*/
const isPrime = num => {
    for(let i = 2, s = Math.sqrt(num); i <= s; i++)
        if(num % i === 0) return false; 
    return num > 1;
}

一开始用的是注释里的isPrime(),但是由于这个是从2到num的,导致复杂度过高。转化为2到Math.sqrt(num)就能通过了。BA里面的实践也是类似的,只不过他没用Math库,把循环条件定为了i*i<=x

Best answer


function gap(g, m, n) {
    var lastPrime = 0;
    var isPrime = function(x) { 
      for (var i=2; i*i<=x; i++) { if (x % i == 0) return false; } return true;
    }
    
    for(var i = m; i <= n; i++)
        if(isPrime(i)) {
            if(i - lastPrime == g) return [lastPrime, i];
            else lastPrime = i;
        }
      
    return null;
}

好在哪里?

  • 中间变量lastPrime用来缓存最近一个质数,这样就能够避免两个质数中间有别的质数,并省掉循环、减少复杂度

Recap

学会判断质数的写法没?

相关文章

网友评论

      本文标题:2020-05-18 5 kyu Gap in Primes

      本文链接:https://www.haomeiwen.com/subject/siamohtx.html