1. Introduction
In this post, we delve into a problem related to finding geometric progressions in arrays. The task is to identify all triplets in a sorted array of distinct positive integers that form a geometric progression with an integral common ratio.
Problem
Given a sorted array of distinct positive integers, we need to find all triplets that form a geometric progression with an integral common ratio. A geometric progression is a sequence of numbers where each term is found by multiplying the previous term by a fixed, non-zero number known as the common ratio.
2. Solution Steps
1. Iterate through the array to consider each element as a potential middle term of the geometric progression triplet.
2. For each middle term, find potential first and third terms by considering the ratios with other elements.
3. Use a set to store triplets to ensure uniqueness.
4. Return the set of all triplets forming geometric progressions.
3. Code Program
#include <iostream>
#include <vector>
#include <set>
using namespace std;
set<vector<int>> findGeometricTriplets(const vector<int>& nums) {
set<vector<int>> triplets;
int n = nums.size();
for (int i = 1; i < n - 1; i++) {
int a = nums[i];
for (int j = 0; j < i; j++) {
for (int k = i + 1; k < n; k++) {
int b = nums[j], c = nums[k];
if (a % b == 0 && c % a == 0 && a / b == c / a) {
triplets.insert({b, a, c});
}
}
}
}
return triplets;
}
int main() {
vector<int> nums = {1, 2, 6, 10, 18, 54};
set<vector<int>> result = findGeometricTriplets(nums);
// Output the result
for (const auto& triplet : result) {
cout << "{";
for (int num : triplet) {
cout << num << " ";
}
cout << "}\n";
}
return 0;
}
Output:
{2 6 18} {6 18 54}
Explanation:
The function findGeometricTriplets identifies all triplets that form a geometric progression in the given sorted array. It iterates over each element, considering it as the middle term of a potential triplet, and then searches for corresponding first and third terms that satisfy the geometric progression conditions. For example, in the input array [1, 2, 6, 10, 18, 54], it successfully finds the triplets [2, 6, 18] and [6, 18, 54] that form geometric progressions.
Comments
Post a Comment