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++ で求める方法を紹介しました。シンプルな二重ループで実装できるため、初心者の方にも理解しやすい内容です。チュートリアルについてご不明な点がある場合は、コメント欄でお気軽にお知らせください。
-
C++ですべての要素を割り切れる配列の要素を見つける方法
いくつかの要素を持つ配列 A があるとします。この中から「他のすべての要素を割り切ることができる」1つの要素を見つけたいと思います。例として、配列 A = [15, 21, 69, 33, 3, 72, 81] を考えてみましょう。この場合、答えは 3 になります。リスト内のすべての数値が3で割り切れるためです。解決策のアプローチこの問題は、以下の手順でシンプルに解くことができます。まず、配列内の最小値を求めます。次に、すべての要素がその最小値で割り切れるかどうかを確認します。すべて割り切れれば、その最小値を返します。1つでも割り切れない要素があれば、-1 を返します(条件を満たす要素は存在し
-
C++で配列内の最大GCDを持つペアを検索する方法
問題の概要正の整数で構成される配列が与えられたとき、その中からGCD(最大公約数)が最大となる整数のペアを見つけるのがこの記事のテーマです。例として、配列 A = {1, 2, 3, 4, 5} を考えてみましょう。この場合の出力は 2 になります。ペア (2, 4) のGCDが 2 であり、それ以外のどのペアのGCDも 2 未満にしかならないためです。解法のアプローチこの問題を効率的に解くには、各約数の出現回数を記録するカウント配列を活用します。全体の流れは次の通りです。配列内の各要素について約数をすべて列挙し、カウント配列に記録します。1つの要素の約数列挙には O(√arr[i]) の時間