Cho mảng Arr[] và số P. Đếm số bộ ba chỉ số (i Ví dụ 1: Ví dụ 2: Với mỗi cặp (i,j), tìm target = P / (arr[i]×arr[j]) trong phần còn lại (nếu chia hết).Ví dụ minh họa
Mã nguồn C++ (Vét cạn O(n³))
#include <bits/stdc++.h>
using namespace std;
int countTriplets(int arr[], int n, int p) {
int count = 0;
for (int i = 0; i < n - 2; i++) {
for (int j = i + 1; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
if (1LL * arr[i] * arr[j] * arr[k] == p) {
count++;
}
}
}
}
return count;
}
int main() {
int Arr[] = {1, 2, 3, 6, 1, 6, 3, 2, 1};
int N = 9;
int product = 6;
cout << "So bo ba co tich = " << product << ": " << countTriplets(Arr, N, product);
return 0;
}
Kết quả chạy chương trình
So bo ba co tich = 6: 18Tối ưu hóa O(n²) - Two Pointers / Hash Map
#include <bits/stdc++.h>
using namespace std;
long long countTripletsOptimized(vectorĐộ phức tạp
Phương pháp Thời gian Không gian Vét cạn 3 vòng lặp O(n³) O(1) Sắp xếp + Binary Search O(n² log n) O(1) Hash Map (nếu giá trị nhỏ) O(n²) O(M) Lưu ý
long long cho tích để tránh tràn số (int max ~2×10⁹).