কম্পিউটার টিউটোরিয়াল

সি++-এ গুণফল ২-এর ঘাত হয় এমন অনঅর্ডার্ড পেয়ার (i,j) গণনা

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
  1. সি++-এ A[i] < B[j] < C[k] সন্তুষ্টকারী ট্রিপলেট গণনা

  2. সি++-এ যোগফল পূর্ণবর্গ হয় এমন পেয়ার গণনা

  3. সি++-এ a²+b²=c² এবং 1≤a≤b≤c≤n সন্তুষ্টকারী ট্রিপলেট গণনা

  4. C++-এ অ্যারেতে ট্রিপলেটের সর্বোচ্চ যোগফল নির্ণয় (i < j < k এবং a[i] < a[j] < a[k] শর্তে)