2016-08-16 5 views
1

すべて!最近私はlucas lehmerテスト方法を使って、mercende素数プロデューサ/ジェネレータを構築しようとしていました。このコードは最初の4つの数字に対して機能し、その後は失敗します。助言がありますか?ありがとう!mercende素数生成器で間違った答えを得る

var totalPrimes = Math.floor(prompt("What would you like the upper limit of 
            our search for primes to be?")); 
for (var i = 2; i < totalPrimes; i++) { 
    var lucasNum = 4; 
    var curNumber = (Math.pow(2, (i+1))-1); 
    for (var x = 0; i-1 > x; x++) { 
     if (lucasNum/curNumber > 1) { 
      lucasNum = (Math.pow(lucasNum, 2)-2); 
     } else { 
      lucasNum = (Math.pow(lucasNum, 2)-2); 
     } 
    } 
    if (lucasNum % curNumber === 0) { 
     console.log("The number " + curNumber + " is prime"); 
    } else { 
     console.log("The number " + curNumber + " is not prime"); 
    } 
} 
+1

実装しようとしていたコードは何ですか?私はそれを反映するLucas Lehmerアルゴリズムを発見していない。 – 4castle

+0

私は自分のコードを試してみることが試しに問題を開始した。ありがとう! –

+0

検証済みの作業アルゴリズムを作成します。これは数学のサイトではありません。 – 4castle

答えて

0

Javascript番号の仮数部(または仮数部)は、53ビット幅です。そのため、完全な精度で保存することができる最大の整数である:

2^53 - 1 = 9007199254740991 = Number.MAX_SAFE_INTEGER 

(あなたが詳細についてはthis pageを読むことをお勧めします。)

あなたのアルゴリズムは非常に迅速にこの制限をヒットする可能性があります。精密爆発は、次の文で発生します。

lucasNum = (Math.pow(lucasNum, 2)-2); 

これはループに含まれています。

+0

ありがとう!非常に役立ちます! –

関連する問題