【问题标题】:Why does my prime number program not work? [closed]为什么我的素数程序不起作用? [关闭]
【发布时间】:2014-01-19 11:04:14
【问题描述】:

我编写了这个程序 (js),理想情况下,它会将 10 以下的所有素数放入一个名为“primes”的数组中……你们中的任何人都知道它为什么不起作用吗? (primes 不会收到警报)。

var max = 10;
var count = 0;
var primes = [];
while(count <= max){
    var factors [];
    var count_ = 0;
    var pres = [];
    while(count_ <= count){
        pres.push(count_);
        count_++;
    }
    var count__ = 0;
    while(count__ <= pres.length){
        var res = count / pres[count__];
        if(res % 1 == 0){
            factors.push(pres[count__]);
        }

        count__++;
    }
    if(factors.length > 2){
        primes.push(count);
    }
    count++;   
}

alert(primes);

这是一个 Js Fiddle http://jsfiddle.net/ydH9C/

感谢您的帮助!

【问题讨论】:

标签: javascript jquery primes


【解决方案1】:

从控制台日志可以看出:

Uncaught SyntaxError: Unexpected token [ 

这是因为您没有将factors 正确定义为数组,或者基本上缺少=。所以改变:

var factors[];

到:

var factors = [];

Updated Demo


我认为正如@Gaby aka G. Petrioli 指出的那样,您需要使用if (factors.length === 2) 而不是if (factors.length &gt; 2),实际上您不需要那么多变量和while 循环,只需这样做:

function getPrimes(max) {
    var count = [], i, j, primes = [];
    for (i = 2; i <= max; ++i) {
        if (!count[i]) {
            primes.push(i);
            for (j = i < 1; j <= max; j += i) {
                count[j] = true;
            }
        }
    }
    return primes;
}

alert(getPrimes(10));

Updated Demo

【讨论】:

  • 就是这样!好的,但现在它警告 4,6,8,9,10...为什么它不显示素数,我的逻辑缺陷在哪里?
  • @CasparWylie 检查我的更新:)
【解决方案2】:

除了缺少=的语法错误你需要测试

if (factors.length === 2)

代替

if (factors.length > 2)

【讨论】:

  • 啊啊啊。我们去吧。谢谢! (+1)
【解决方案3】:

为了让程序工作使用

 var factors=[];

而不是var factors[]

代码中也有逻辑错误:)

【讨论】:

  • 逻辑错误是什么...? ://
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多