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

配列内で素数回出現する要素を数えるアルゴリズムとC++実装

ある配列が与えられたとき、その中に素数回出現している要素がいくつあるかを数える問題を考えてみましょう。

例として、次の配列を見てください。

{1, 2, 2, 0, 1, 5, 2, 5, 0, 0, 1, 1}

この場合、各要素の出現回数は以下のようになります。

  • 1 → 4回(素数ではない)
  • 2 → 3回(素数)
  • 0 → 3回(素数)
  • 5 → 2回(素数)

したがって、素数回出現している要素は {2, 0, 5} の3つとなり、答えは 3 です。

アルゴリズム

countPrimeOccurrence(arr, n)

Begin
    count := 0
    キーと値がint型のマップを定義する
    arr内の各要素eについて、以下を実行する
        map.key(arr) の値を増やす
    done
    各キーについて、対応する値が素数かどうかを判定し、
    素数であれば count を増やす
    count を返す
End

C++による実装例

まず頻度を記録するためのマップを作成し、各要素の出現回数をカウントします。その後、各出現回数が素数かどうかを isPrime() 関数で判定し、素数であればカウントを増やしていきます。

#include <iostream>
#include <map>
using namespace std;

bool isPrime(int n){
    for(int i = 2; i<=n/2; i++){
        if(n % i == 0){
            return false;
        }
    }
    return true;
}

int countPrimeOcurrence(int arr[], int n){
    int count = 0;
    map<int, int> freq_map;
    for(int i = 0; i<n; i++){
        freq_map[arr[i]]++; // 出現頻度をカウント
    }
    for (auto it = freq_map.begin(); it != freq_map.end(); it++) {
        if (isPrime(it->second))
            count++;
    }
    return count;
}

int main() {
    int arr[] = {1, 2, 2, 0, 1, 5, 2, 5, 0, 0, 1, 1};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << "Prime frequency count: " << countPrimeOcurrence(arr, n);
}

実行結果

Prime frequency count: 3

処理のポイント

  • 時間計算量: マップへの挿入と走査に O(n log n)、素数判定に O(√m)(mは最大出現回数)程度かかります。
  • isPrime関数: 2から n/2 まで順に割り切れるかを確認するシンプルな試し割り法を使用しています。より効率化するなら √n まで調べる方法もあります。
  • map の利用: C++の std::map を使うことで、要素ごとの出現回数を自動的に整理できます。
  1. 【Python入門】配列(リスト)内の全要素の出現頻度をカウントする2つの方法

    このチュートリアルでは、配列(リスト)内のすべての要素が出現する回数(頻度)を求めるプログラムの作成方法を解説します。Pythonでは主に2つのアプローチがあり、それぞれ実装方法とコード例を見ていきましょう。 方法1:dict(辞書)を使う まずは、標準的なdict(辞書)を使った基本的な方法です。処理の流れは以下の通りです。 配列を初期化します。 空の辞書を初期化します。 リストを反復処理します。 要素が辞書に存在しない場合は、値を 1 に設定します。 要素がすでに辞書に存在する場合は、値を +1 してカウントを増やします。 辞書を反復処理しながら、要素とその出現回数を出力します。

  2. Bash配列の使い方を徹底解説!作成・ループ・追加・削除の実例付きガイド

    配列(Array)とは、複数の要素をまとめて管理できるデータ構造です。Bashでは、文字列や数値など、異なる型の要素を1つの配列に混在させて格納することも可能です。 本記事では、Bashにおける配列の作成方法と基本的な使い方を解説します。さらに、ループ処理、要素の出力、配列サイズの取得、内容の変更といった配列操作についても、具体例を交えながら詳しく見ていきましょう。 Bashで配列を作成する方法 Bashで配列を作成するには、主に2つの方法があります。 declareキーワードを使う方法 declare -a my_bash_array このコマンドを実行すると、「my_bash_array