【C++】1からaと1からbのペアのうち、合計がNで割り切れる組の数を数える方法
整数 a、b、n が与えられます。ここで x は 1 以上 a 以下の整数、y は 1 以上 b 以下の整数とし、これらを組み合わせて作られるすべてのペア (x, y) のうち、合計値 (x + y) が n で割り切れるペアの総数を求めるのが今回の課題です。
入出力の例
例1
入力: int a = 2, b = 3, n = 2
出力: 合計がNで割り切れるペアの数 ― 3
説明:
まず、1 から a(=2)までの整数は「1, 2」です。 次に、1 から b(=3)までの整数は「1, 2, 3」です。 作成できるペアは (1,1)、(1,2)、(1,3)、(2,1)、(2,2)、(2,3) の6通りで、 それぞれの合計は 2、3、4、3、4、5 となります。 このうち n(=2)で割り切れるのは 2、4、4 の3つなので、答えは 3 です。
例2
入力: int a = 4, b = 3, n = 3
出力: 合計がNで割り切れるペアの数 ― 4
説明:
1 から a(=4)までの整数は「1, 2, 3, 4」、1 から b(=3)までの整数は「1, 2, 3」です。 作成できるペアは全部で12通りあり、それぞれの合計は 2、3、4、3、4、5、4、5、6、5、6、7 です。 このうち n(=3)で割り切れるのは 3、3、6、6 の4つなので、答えは 4 です。
プログラムで使用するアプローチ
- 1〜a、1〜b の範囲と割る数として、整数変数 a、b、n を入力として受け取る
- 後続の処理のため、すべての値を関数に渡す
- ペアの個数を保持する一時変数 count を用意する
- i を 1 から a まで繰り返す外側の for ループを開始する
- その内側で、j を 1 から b まで繰り返す for ループを開始する
- ループ内で sum に i + j を代入する
- sum % n == 0 が成立するかどうかを判定し、成立していれば count を 1 増やす
- count を返す
- 結果を出力する
C++実装例
#include <iostream>
using namespace std;
int Pair_a_b(int a, int b, int n){
int count = 0;
for (int i = 1; i <= a; i++){
for (int j = 1; j <= b; j++){
int temp = i + j;
if (temp % n == 0){
count++;
}
}
}
return count;
}
int main(){
int a = 2, b = 20, n = 4;
cout<<"1からaと1からbまでのペアのうち、合計がNで割り切れる組の数: "<<Pair_a_b(a, b, n);
return 0;
}
出力結果
上記のコードを実行すると、以下の出力が得られます。
1からaと1からbまでのペアのうち、合計がNで割り切れる組の数: 10
計算量に関する補足
この手法はすべてのペア (i, j) を二重ループで確認するため、時間計算量は O(a × b) となります。a と b が小さい範囲では十分に実用的ですが、値が大きくなる場合は、各数を n で割った余りの分布(剰余の出現回数)を事前に集計して組み合わせを数えることで、線形時間での効率化も可能です。
-
C++で合計が素数かつn未満となるペアの個数を数える方法
正の整数 n が入力として与えられます。この記事の目的は、合計 (i + j) が素数であり、かつ n 未満となるペア (i, j) の個数を求めることです。ここで、i ≠ j かつ i, j ≥ 1 という条件を満たす必要があります。例として、n が 4 の場合を考えてみましょう。このとき条件を満たすペアは (1, 2) の 1 つだけです。1 + 2 = 3 は素数であり、4 未満だからです。また、1 と 2 はどちらも 1 以上の条件を満たしています。それでは、具体例を使って理解を深めましょう。入力 − n = 7出力 − 合計が素数かつ n 未満となるペアの数 − 3説明 − 該当する
-
C++で2つのBSTから合計が指定値xと等しいペアを数える方法
2つの二分探索木(BST)と整数値 x が与えられます。この記事の目的は、BST_1 から1つのノード、BST_2 からもう1つのノードを選んだペアのうち、両ノードの値の合計が x に一致するものの個数を求めることです。具体的には、BST_1 のノードと BST_2 のノードのデータ部分を加算し、その合計が x と等しければカウントを1つ増やしていきます。具体例で確認してみましょう。入力出力 − 合計が指定値 x に等しい2つのBSTからのペアの数 − 1説明 − 該当するペアは (8, 6) です。入力出力 − 合計が指定値 x に等しい2つのBSTからのペアの数 − 2説明 − 該当するペ