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

C++で配列内の要素に最も多く割り切れる数を見つける方法

このチュートリアルでは、与えられた配列の中から、配列内の他の要素によって最も多く割り切れる数(割り切れる回数が最大となる値)を見つける方法を解説します。

アルゴリズムの手順

  • 配列と、結果を格納する変数を初期化します。

  • 外側のループで配列を走査します。

    • カウンター変数を初期化します。

    • 内側のループでもう一度配列を走査します。

      • 現在の要素が、比較対象の配列要素で割り切れる場合はカウンターをインクリメントします。

    • 現在のカウントがこれまでの最大値より大きければ、結果を更新します。

  • 結果を出力します。

サンプルコード

それでは、実際のコードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;

int numberWithMaximumMultiples(int arr[], int n) {
    int result = -1;
    for (int i = 0; i < n; i++) {
        int count = 0;
        for (int j = 0; j < n; j++) {
            if (arr[i] % arr[j] == 0) {
                count++;
            }
        }
        if (count > result) {
            result = count;
        }
    }
    return result;
}

int main() {
    int arr[] = {4, 24, 16, 3, 12, 28};
    cout << numberWithMaximumMultiples(arr, 6) << endl;
    return 0;
}

実行結果

上記のコードを実行すると、次の出力が得られます。

4

出力の解説

この例では、24 が配列内の 4、24、3、12 の4つの要素で割り切れるため、最大カウントは 4 となります。

計算量について

このアルゴリズムは二重ループを使用するため、時間計算量は O(n²)、空間計算量は O(1) です。配列のサイズが大きい場合やさらなる高速化が必要な場合は、各要素の出現回数をハッシュマップで管理し、約数の個数を効率的に数える方法なども検討するとよいでしょう。

まとめ

本記事では、配列内の要素に最も多く割り切れる数(最大の割り切れる回数)を C++ で求める方法を紹介しました。シンプルな二重ループで実装できるため、初心者の方にも理解しやすい内容です。チュートリアルについてご不明な点がある場合は、コメント欄でお気軽にお知らせください。

  1. C++ですべての要素を割り切れる配列の要素を見つける方法

    いくつかの要素を持つ配列 A があるとします。この中から「他のすべての要素を割り切ることができる」1つの要素を見つけたいと思います。例として、配列 A = [15, 21, 69, 33, 3, 72, 81] を考えてみましょう。この場合、答えは 3 になります。リスト内のすべての数値が3で割り切れるためです。解決策のアプローチこの問題は、以下の手順でシンプルに解くことができます。まず、配列内の最小値を求めます。次に、すべての要素がその最小値で割り切れるかどうかを確認します。すべて割り切れれば、その最小値を返します。1つでも割り切れない要素があれば、-1 を返します(条件を満たす要素は存在し

  2. C++で配列内の最大GCDを持つペアを検索する方法

    問題の概要正の整数で構成される配列が与えられたとき、その中からGCD(最大公約数)が最大となる整数のペアを見つけるのがこの記事のテーマです。例として、配列 A = {1, 2, 3, 4, 5} を考えてみましょう。この場合の出力は 2 になります。ペア (2, 4) のGCDが 2 であり、それ以外のどのペアのGCDも 2 未満にしかならないためです。解法のアプローチこの問題を効率的に解くには、各約数の出現回数を記録するカウント配列を活用します。全体の流れは次の通りです。配列内の各要素について約数をすべて列挙し、カウント配列に記録します。1つの要素の約数列挙には O(√arr[i]) の時間