JavaScript の楽しい質問: 素数の違い

黄舟
リリース: 2017-02-04 15:09:44
オリジナル
1254 人が閲覧しました

素数は規則的に分布していません。これは、隣接する 2 つの素数の差に反映される可能性があります。
2と3の差は1、3と5の差は2、5と7の差は確かに2ですが、7と11の差は4です。
一見しただけではパターンがわかりません、それは本当です。
2 と 50 の間で、2 の差がある次の隣接する素数のペアを見つけることができます:
3-5、5-7、11-13、17-19、29-31、41-43
明らかに、上記の条件を満たす最初の素数のペアは 3 ~ 5 です。
それでは、より一般的なケースで、m から n まで g のギャップを持つ隣接する素数の最初のペアは何でしょうか?
関数のプロトタイプは次のとおりです:
gap(g, m, n)

例は次のとおりです:

gap(2, 5, 7) // --> [5, 7]  
gap(4, 130, 200) // --> [163, 167]  
gap(2, 5, 5) // --> null
ログイン後にコピー

g の差を満たす隣接する素数の最初のペアである必要があることに注意してください。
見つからない場合は null を返します。
素数を扱うこの種の質問では、必然的に素数を決定する関数を導入する必要があります。この関数が ECMA 標準に組み込まれたらどんなに素晴らしいだろうと思わずにはいられません。
しかし、汎用性を考えると、この isPrime メソッドの適用シナリオは確かに少し狭く、Number.prototype にバインドするのには適していないため、何度も問題を行うときに剥がして貼り付けるしかありませんが、汗^_^。
この質問自体は難しくありません。ループ内で、修飾された素数のペアが存在しない場合は、null を返します。

Number.prototype.isPrime = function(){    
    var maxFactor = Math.floor(Math.sqrt(this));    
        for(var i=2;i<=maxFactor;i++){    
            if(this % i === 0){    
                return false;    
            }    
        }    
    return true;    
};    
  
function gap(g, m, n) {  
    var firstPrime;  
    var secondPrime;  
    for(var i=m;i<=n;i++){  
        if(i.isPrime()){  
            firstPrime = secondPrime;  
            secondPrime = i;  
            if(secondPrime - firstPrime === g){  
                return [firstPrime,secondPrime];  
            }   
        }  
    }  
    return null;  
}
ログイン後にコピー

上記は JavaScript に関する興味深い質問です。素数の違いについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!