用JS查找素数序列

时间:2016-11-07 13:38:52

标签: javascript

我必须获得一系列素数。但我的代码不起作用。怎么可能修复它?

var num1 = parseInt(prompt('Enter a number'));
var num2 = parseInt(prompt('Enter a number'));
var num3 = 0;
function primeSeq(num1, num2) {  
var b = 1;
var c = '';
if (num1 > num2) {
num3 = num2;
num2 = num1;
num1 = num3;
        }
for (var i = num1; i < num2; i++) {
for (var j = 2; j < i; j++) {
if (i % j == 0) {
b++;
}
if (b <= 1) {
c += i + ' ';               
}
}
}
return c;
}
alert(primeSeq(num1, num2));

4 个答案:

答案 0 :(得分:1)

我想你想要这样的东西

var num1 = parseInt(prompt('Enter a number'));
var num2 = parseInt(prompt('Enter a number'));
var num3 = 0;
if (num1 > num2) {
  num3 = num2;
  num2 = num1;
  num1 = num3;
}
function primeSeq(num1, num2) {  
  var b;
  var c = '';
  for (var i = num1; i < num2; i++) {
    b = 1;
    for (var j = 2; j < i; j++) {
      if (i % j === 0) {
        b++;
      }
    }     
    if (b === 1) {
      c += i + ' ';               
    }
  }
  return c;
}
alert(primeSeq(num1, num2));

简而言之,b应该在每个新的主要候选者(i循环)上重置为1,并且b的检查应该在内部(j)循环之外

请注意,有更多优化算法。

答案 1 :(得分:1)

更简单的方法是使用筛分系统,如果一个数字可以被另一个质数整除,则它不是质数。您可以编写如下函数:

function primes(max) {
    let primes = [2];
    for (let i = 3; i <= max; i++) {
        let found = true;
        for (let j = 0; j < primes.length; j++) {
            if (i % primes[j] == 0) found = false;
        }
        if (found) primes.push(i);
    }
    return primes;
}

说明

默认情况下,您知道2是质数,所以您从3开始。您不想执行最大值,即i <= max语句。假设它是一个素数,然后在数组中搜索是否可以被您之前发现的素数整除(如果是),则将found设置为false。 现在检查是否找到了,将数组压入数组并返回素数。

答案 2 :(得分:0)

这是更优化的算法:

function primeSeq(num1, num2) {
  var primes = [];
  var isPrime;
  var j;
  var results = [];

  for (var i = 2; i < num2; i++) {
    isPrime = true;
    j = 0;
    while (j < primes.length) {
      if (i % primes[j] === 0) {
        isPrime = false;
        break;
      }
      j++;
    }
    if (isPrime) {
      primes.push(i);
      if (i >= num1) {
        results.push(i);
      }
    }
  }
  return results.join(' ');
}

为了使数字成为素数,它必须不能用所有较小的素数分割,因此我们生成一个primes数组来检查。 还有一个理论认为,每个大于3的素数都有以下形式:

6k+1 or 6k-1

所以这会简化它。

答案 3 :(得分:0)

尝试这个

Template.theTemplate.onCreated(function onCreated() {
  this.someNumber = new ReactiveVar(42); // changing this will cause a new run
});

Template.theTemplate.helpers({
  someVar() {
    return Template.instance().someNumber.get();
  }
});