Cho mảng chứa tất cả ước số của A và B (ước chung xuất hiện 2 lần). Tìm A và B. Giải pháp: A = max(mảng). B = số lớn thứ 2 không chia hết A, hoặc số trùng lặp lớn nhất.
Ví dụ mã nguồn
#include <bits/stdc++.h>
using namespace std;
void findAB(int arr[], int n) {
sort(arr, arr+n);
int A = arr[n-1], B = -1;
for (int i=n-2;i>=0;i--) {
if (A % arr[i] != 0) { B = arr[i]; break; }
if (i>0 && arr[i] == arr[i-1]) { B = arr[i]; break; }
}
cout << "A = " << A << ", B = " << B << endl;
}
int main() {
int arr[] = {3,2,3,4,12,6,1,1,2,6};
findAB(arr, 10); // A=12, B=6
return 0;
}
Kết quả
A = 12, B = 6
Ước của 12: 1,2,3,4,6,12. Ước của 6: 1,2,3,6. Gộp: 1,1,2,2,3,3,4,6,6,12.