首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的质数程序不起作用?

为什么我的质数程序不起作用?
EN

Stack Overflow用户
提问于 2014-01-19 19:04:14
回答 3查看 77关注 0票数 0

我写了这个程序(js),理想情况下会将10以下的所有质数放入一个名为“质数”的数组中……你们谁能认识到为什么它不起作用?(质数不会收到警报)。

代码语言:javascript
复制
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小提琴http://jsfiddle.net/ydH9C/

谢谢你的帮助!

EN

回答 3

Stack Overflow用户

发布于 2014-01-19 19:06:12

正如您从控制台日志中看到的:

代码语言:javascript
复制
Uncaught SyntaxError: Unexpected token [ 

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

代码语言:javascript
复制
var factors[];

至:

代码语言:javascript
复制
var factors = [];

Updated Demo

我认为就像@Gaby又名G.Petrioli指出的那样,你需要使用if (factors.length === 2)而不是if (factors.length > 2),实际上你不需要那么多的变量和while循环,就像这样做:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2014-01-19 19:18:03

除了缺少=的语法错误之外,您还需要测试

代码语言:javascript
复制
if (factors.length === 2)

而不是

代码语言:javascript
复制
if (factors.length > 2)
票数 1
EN

Stack Overflow用户

发布于 2014-01-19 19:08:53

要使程序正常工作,请使用

代码语言:javascript
复制
 var factors=[];

代替var factors[]

代码中还有一个逻辑错误:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21215890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档