0

誰かがこのコードを手伝ってくれますか? 10,001番目の素数を取得することになっています。以前の問題でこのコードをうまく利用したので、 is_prime 関数が数値が素数であるかどうかをテストするために機能することを知っています。今、カウンターが必要なものに到達するまでforループでそれを呼び出そうとしていますが、最新の数値を変数「ホルダー」に格納し、最後にホルダーを印刷します。

function is_prime(num) {
    if (isNaN(num)) return false;
    for (var i=2; i<=Math.sqrt(num); i++) {
        if (num % i === 0) {
            return false;
        }
    }
    return true;
}

function getBigPrime () {
var holder = 0;
var counter = 0;
    for (var k=3; counter<=10000; k+=2) {
        if (is_prime(k)) 
            holder = k; 
            counter += 1;
    }
    console.log(holder);
}

getBigPrime();
4

2 に答える 2

2

ブロックの括弧を省略するとif、最初の行だけが実際にブロックの一部になります。現在のifステートメントは次のように動作します。

if (is_prime(k)) {
    holder = k; 
}

counter += 1;

また、ループは最初の素数である 2 をスキップします。

于 2013-08-03T05:19:58.357 に答える
0

カウンターでスコープ エラーが発生しました。forループではcounter = 1;、2を考慮して初期化し、そのままにしておくことができます

http://jsfiddle.net/XtTYm/2/

function is_prime(num) {
    if (isNaN(num)) return false;
    var sq = Math.sqrt(num);
    for (var i=2; i<=sq; i++) {
        if (num % i === 0) {
            return false;
        }
    }
    return true;
}

    function getBigPrime () {
    var holder = 0;
    var counter = 1;
        for (var k=3; counter<=10000; k+=2) { 
            if (is_prime(k)){ 
                holder = k; 
                counter += 1; // should be inside the if
            }
        }
        console.log(holder);
    }

    getBigPrime();
于 2013-08-03T05:21:04.347 に答える