ホームページ  >  記事  >  ウェブフロントエンド  >  Emrips のアンチプライム列挙を JavaScript で実装する方法

Emrips のアンチプライム列挙を JavaScript で実装する方法

亚连
亚连オリジナル
2018-06-22 14:33:061450ブラウズ

以下のエディターは、JavaScript で Emrips アンチプライム列挙を実装するためのサンプル コードを共有します。これは優れた参考値であり、皆さんの役に立つことを願っています。編集者をフォローして見てみましょう

今日は「エミルプ」という概念を提案したカタを見ました。素数を反転すると、別の素数が得られます。この数は「エミールプ」と呼ばれます。

例: 13,17 は素数、31,71 も素数、13 と 17 は「エミルプ」です。 しかし、素数 757,787,797 は回文素数であり、反転した数が元の数と同じであることを意味するため、「エミルプ」とはみなされません。

この質問では、正の整数 n を入力し、n 未満の「emirps」の数、最大の「emirps」、および n 未満のすべての「emirps」の合計を返す関数を書く必要があります。

問題を解く考え方は、まずn以下の素数をすべて列挙し、回文素数と反転後の合成数となる数を消去するというものです。

まず、素数を決定する関数を作成します

主に 3 つの数学的結論に基づいています:

すべての合成数は、いくつかの素数の積です

数値が因数分解できる場合は、2因数は sqrt(n) 以下、および sqrt(n) 以上の 1 でなければなりません。

3 より大きいすべての素数は 6X+1 または 6X-1 の形式であり、6 の倍数である隣接する数ですが、すべての 6X+1 または 6X-1 が素数であるわけではありません。

最初の結論は矛盾による証明で証明できます

3番目の結論は証明されます:

数字を次の形式で表します 6X-1, 6X, 6X+1, 6X+2, 6X+ 3 、 6X+4 (X は正の整数) 6X => 2*3x 6X+2 => 3(2x+1) 6X+4 => (3x +2) これらは間違いなく素数ではない、つまり、素数は 6X-1 または 6X-1 のみであることが証明できます

コード:

function isPrimeNumber(num){
  
 if(num == 2 || num == 3){
  return true;
 }/*2、3特殊处理*/
  
 if(num % 6 != 1 && num % 6 != 5){
  return false;
 }/*根据结论三排除*/
  
 for(var i=5;i<=Math.sqrt(num);i+=6){
  if(num % i == 0 || num % (i+2) == 0){
   return false;
  }
 }/*根据结论二、结论三排除*/
  
 return true;
}

次に、回文素数と次の数を削除します。反転後の合成

コード:

function emirpNumber(num){
 
 var reverseNumber = Number(String(num).split(&#39;&#39;).reverse().join(&#39;&#39;))
  
 if(reverseNumber != num && isPrimeNumber(reverseNumber)){
  return true;
 }
 else{
  return false;
 }
}

最後に目的の結果を出力します

コード:

function findEmirp(n){
 
 var emirpGroup = [];
 
 for(var i=1;i<n;i++){
  if(isPrimeNumber(i) && emirpNumber(i)){
   emirpGroup.push(i);   
  }
 }
  
 return [
  &#39;n为:&#39; + n,
  &#39;数量为:&#39; + emirpGroup.length,
  &#39;最大数:&#39; + emirpGroup[emirpGroup.length - 1],
  &#39;求和:&#39; + emirpGroup.reduce(function(total,current){
   return total + current;
  })
 ]
}

出力結果と時間を見てください

n=1000000:

n=10000000:

以上、皆様の参考になれば幸いです。

関連記事:

JavaScriptを使用してカスタムイベントメカニズムを実装する方法

JavaScriptによる地図データ構造の詳細な解釈

Javascriptを使用して2次元の週間ビューカレンダーを開発する方法

JS 抽象ファクトリー パターンについて (詳細なチュートリアル)

Django と Vue 構文間の競合を解決する方法

以上がEmrips のアンチプライム列挙を JavaScript で実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。