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

C++-এ সুপার প্যালিনড্রোম গণনা

সমস্যা বিবরণ

একটি সংখ্যা সুপার প্যালিনড্রোম যদি সেটি প্যালিনড্রোম হয় এবং প্যালিনড্রোম সংখ্যার স্কোয়ারও হয়। Ranges [L, R]-এ কতগুলো সুপার প্যালিনড্রোম আছে তা বের করতে হবে।

উদাহরণ

L = 5, R = 500 → আউটপুট = 3 (সুপার প্যালিনড্রোম: 9, 121, 484)

সমাধান পদ্ধতি

  • প্যালিনড্রোম সংখ্যা জেনারেট করে তার স্কোয়ার চেক করা হয়।
  • রিকার্সিভ helper() ফাংশন দিয়ে প্যালিনড্রোম বানানো হয় (ওয়েড এবং ইভেন দৈর্ঘ্য)।
  • isb_palindrome() দিয়ে স্কোয়ার প্যালিনড্রোম কিনা চেক করা হয়।
  • সীমাবদ্ধতা: sqrt(R) পর্যন্ত প্যালিনড্রোম জেনারেট করা হয়।

C++ বাস্তবায়ন

#include <bits/stdc++.h>
using namespace std;

class Solution {
    int ans = 0;
    
    bool is_palindrome(long x) {
        if (x == 0) return true;
        if (x % 10 == 0) return false;
        long left = x, right = 0;
        while (left >= right) {
            if (left == right || left / 10 == right) return true;
            right = 10 * right + (left % 10);
            left /= 10;
        }
        return false;
    }
    
    void helper(long x, int m, int M, long double lb, long double ub) {
        if (x > ub) return;
        if (x >= lb && is_palindrome(x * x)) ans++;
        
        for (int i = 1; m + 2 * i <= M; i++) {
            long W = powl(10, m + 2 * i - 1) + 1;
            long w = powl(10, i);
            for (int z = 1; z <= 9; z++)
                helper(z * W + x * w, m + 2 * i, M, lb, ub);
        }
    }
    
public:
    int superpalindromesInRange(string L, string R) {
        long double lb = sqrtl(stol(L)), ub = sqrtl(stol(R));
        int M = log10l(ub) + 1;
        for (int z = 0; z <= 9; z++) {
            helper(z, 1, M, lb, ub);
            helper(11 * z, 2, M, lb, ub);
        }
        return ans;
    }
};

int main() {
    Solution ob;
    cout << ob.superpalindromesInRange("5", "500");
    return 0;
}

ইনপুট ও আউটপুট

ইনপুট: "5", "500"

আউটপুট: 3

  1. C++-এ reference_wrapper

  2. C++-এ এনক্যাপসুলেশন

  3. C++-এ আইডেন্টিফায়ার (Identifiers)

  4. লিনাক্সে C++-এর জন্য সেরা IDE কী?