Cho các biến N, M, A và B. Mục tiêu là tìm các cặp có thứ tự của số dương (i, j) sao cho tổng của chúng chia hết cho cả A và B. Và 1 <= i <= N và 1 <= j <= M.
Ta duyệt bằng hai vòng lặp cho i và j. Nếu tổng (i+j)%A==0 && (i+j)%B==0. Tăng count.
Hãy hiểu qua các ví dụ.
Đầu vào
N = 5, M = 10, A = 2, B = 3;
Đầu ra
Cặp có thứ tự (i,j) mà (i+j) chia hết cho A & B: 9
Giải thích
Các cặp: (1,5), (2,4), (2,10), (3,3), (3,9), (4,2), (4,8), (5,1), (5,7). Tổng 9 cặp.
Đầu vào
N = 10, M = 10, A = 10, B = 11;
Đầu ra
Cặp có thứ tự (i,j) mà (i+j) chia hết cho A & B: 0
Giải thích
Không có cặp nào thỏa mãn.
Phương pháp sử dụng trong chương trình dưới đây
- Nhận số nguyên N, M, A, B.
- Hàm
sumDivisible(int n, int m, int a, int b)nhận tất cả biến và trả về số cặp có thứ tự với tổng chia hết cho A và B. - Khởi tạo biến count = 0 cho cặp.
- Duyệt bằng hai vòng lặp for để tìm i và j.
- Bắt đầu từ i=1 đến i<=n và j=1 đến j<=m.
- Kiểm tra nếu (i+j)%a==0 && (i+j)%b==0.
- Nếu đúng tăng count.
- Sau tất cả vòng lặp count chứa tổng số cặp như vậy.
- Trả về count làm kết quả.
Ví dụ
#include <bits/stdc++.h>
using namespace std;
int sumDivisible(int n, int m, int a, int b) {
int count = 0;
for (int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if((i+j)%a==0 && (i+j)%b==0) {
count++;
}
}
}
return count;
}
int main() {
int N = 50, M = 100, A = 5, B = 10;
cout << "Cặp có thứ tự (i,j) mà (i+j) chia hết cho A & B: " << sumDivisible(N, M, A, B);
return 0;
}
Đầu ra
Nếu chạy mã trên sẽ cho kết quả sau:
Cặp có thứ tự (i,j) mà (i+j) chia hết cho A & B: 500