JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで配列内のすべての素数の合計を求める方法

本記事では、数値の配列を受け取り、その中に含まれる素数のみを合計して返すJavaScript関数の作成方法を解説します。

問題の概要

与えられた配列の中から素数だけを取り出し、その合計値を計算する関数を実装します。

例として、次のような配列を考えてみましょう。

const arr = [43, 6, 6, 5, 54, 81, 71, 56, 8, 877, 4, 4];

この配列に含まれる素数は 43、5、71、877 の4つです。したがって、関数は以下の合計を返す必要があります。

43 + 5 + 71 + 877 = 996

実装コード

以下が実際のコード例です。まず素数かどうかを判定するヘルパー関数 isPrime を定義し、それを使って配列内の各要素を判定しながら合計を計算します。

const arr = [43, 6, 6, 5, 54, 81, 71, 56, 8, 877, 4, 4];

// 素数判定関数
const isPrime = n => {
    if (n === 1){
        return false;
    } else if (n === 2){
        return true;
    } else {
        for (let x = 2; x < n; x++){
            if (n % x === 0){
                return false;
            }
        }
        return true;
    };
};

// 素数の合計を求める関数
const primeSum = arr => {
    let sum = 0;
    for (let i = 0; i < arr.length; i++){
        if (!isPrime(arr[i])){
            continue;
        };
        sum += arr[i];
    };
    return sum;
};

console.log(primeSum(arr));

コードの解説

isPrime 関数について

isPrime 関数は、引数として受け取った数値が素数であるかどうかを真偽値で返します。判定ロジックは以下の通りです。

  • 1 の場合: 1 は素数ではないため false を返します。
  • 2 の場合: 2 は唯一の偶数の素数なので true を返します。
  • その他の場合: 2 から n-1 までの整数で順番に割り切れるかどうかを確認し、ひとつでも割り切れる数があれば合成数として false を返します。最後まで割り切れなければ素数として true を返します。

primeSum 関数について

primeSum 関数は、for ループで配列の各要素を走査し、isPrime による判定結果が false の場合は continue でスキップします。素数であれば合計変数 sum に加算していき、ループ完了後にその合計を返します。

出力結果

このコードをコンソールで実行すると、次の出力が得られます。

996

補足:より効率的な素数判定

上記の isPrime 関数はシンプルですが、大きな数値を扱う場合は計算量が O(n) になるため非効率です。判定を「2 から n の平方根まで」に限定することで、計算量を O(√n) に削減できます。

const isPrimeFast = n => {
    if (n < 2) return false;
    if (n === 2) return true;
    if (n % 2 === 0) return false;
    for (let x = 3; x <= Math.sqrt(n); x += 2){
        if (n % x === 0) return false;
    }
    return true;
};

このように最適化することで、配列に大きな数値が含まれる場合でも高速に素数判定が可能になります。

  1. 【C++】配列内のすべての素数の積を求める方法

    整数型配列 arr[] が与えられたとき、その配列に含まれるすべての素数を見つけ出し、それらの積を計算するのが本記事のテーマです。素数とは、1とその数自身でしか割り切れない正の整数のことです。たとえば、2、3、5、7、11などが素数に該当します。それでは、次の配列を例に解を求めてみましょう。入力: arr[] = { 11, 20, 31, 4, 5, 6, 70 }出力: 1705説明: 配列内の素数は 11、31、5 の3つであり、その積は 11 × 31 × 5 = 1705 となります。入力: arr[] = { 1, 2, 3, 4, 5, 6, 7 }出力: 210説明: 配列内の

  2. C++で配列内のすべての素数のXORを求める方法

    問題概要 この問題では、n個の要素からなる配列が与えられます。求めるのは、配列に含まれるすべての素数のXOR(排他的論理和)です。 具体例で問題を確認してみましょう。 入力 − {2, 6, 8, 9, 11} 出力 − 9 解説 − 配列内の素数は「2」と「11」の2つです。2 XOR 11 = 9 となるため、答えは 9 になります。 解決のためのアプローチ この問題を解くには、まず配列内のすべての素数を特定し、それらを順にXORしていくことで結果を求めます。 各要素が素数かどうかを判定するには、エラトステネスの篩(Sieve of Eratosthenes)を使用するのが効率的です。あ