N উপাদানের একটি অ্যারে দেওয়া আছে। লক্ষ্য হল সব পেয়ার (Arr[i], Arr[j]) যাদের গুণফল ২-এর ঘাত (power of two) এবং i!=j।
পেয়ারগুলোর গুণফল বের করে চেক করা হয় square root of that sum is equal to the floor value of the square root. sqrt(Arr[i]+Arr[j]) - floor(sqrt(Arr[i]+Arr[j])) == 0।
উদাহরণ
ইনপুট: Arr[] = { 4,3,2,1,2,4 }, N=6
আউটপুট: যোগফল পূর্ণবর্গ হয় এমন পেয়ার: ২
ব্যাখ্যা: Arr[1]+Arr[3]=4, sqrt(4)-floor(4)=0 → ৪ পূর্ণবর্গ। Arr[2]+Arr[4]=4, sqrt(4)-floor(4)=0 → ৪ পূর্ণবর্গ। বাকি পেয়ারগুলোর যোগফল ৭,৬,৫,৮ যা পূর্ণবর্গ নয়।
ইনপুট: Arr[] = { 3,3,3,3,3 }, N=5
আউটপুট: যোগফল পূর্ণবর্গ হয় এমন পেয়ার: ০
ব্যাখ্যা: সব পেয়ারের যোগফল ৬, যা পূর্ণবর্গ নয়।
অ্যাপ্রোচ
- ইন্টিজার অ্যারে Arr[] নেওয়া হয়।
- n ভেরিয়েবলে দৈর্ঘ্য।
countPairs(int arr[], int n)ফাংশন অ্যারে এবং দৈর্ঘ্য গ্রহণ করে গুণফল ২-এর ঘাত হয় এমন পেয়ার রিটার্ন করে।- দুটি নেস্টেড for লুপ: আউটার 0<=i
- prod = arr[i]*arr[j]। ceil(log2(prod)) == floor(log2(prod)) চেক করা হয় (২-এর ঘাত কিনা)। সত্য হলে count বাড়ানো হয়।
উদাহরণ কোড
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int countPairs(int arr[], int n) {
int count = 0;
int prod = 0;
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
prod = arr[i] * arr[j];
if (ceil(log2(prod)) == floor(log2(prod))) {
count++;
}
}
}
return count;
}
int main() {
int arr[] = { 2, 5, 8, 16, 128 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << endl << "Pairs whose product is power of 2:" << countPairs(arr, n);
return 0;
}
আউটপুট
Pairs whose product is power of 2: 6