কম্পিউটার

C++ এ সবচেয়ে বড় প্যালিনড্রোম পণ্য


ধরুন আমরা n ইনপুট করেছি, আমাদের সবচেয়ে বড় প্যালিনড্রোমটি খুঁজে বের করতে হবে যা দুটি n সংখ্যার সংখ্যার গুণন ব্যবহার করে তৈরি করা যেতে পারে। যেহেতু সংখ্যাগুলো অনেক বড় তাই আমরা 1337 ব্যবহার করে মোড পারফর্ম করতে পারি। তাই যদি ইনপুটটি 2 বলা হয়, তাহলে উত্তর হবে 987, 987 =(99*91) mod 1337 =9009 mod 1337 =987।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • maxVal :=10^n – 1
  • minVal :=maxVal / 10
  • আরম্ভ করার জন্য h :=maxVal, যখন h> minVal, আপডেট করুন (h 1 দ্বারা কম করুন), −
      করুন
    • বামে :=h, ডানে :=0
    • আরম্ভ করার জন্য i :=h, যখন i> 0, আপডেট করুন right =right * 10 + i mod 10, left :=left * 10, i :=i / 10, do −
      • x :=বাম + ডান
      • আরম্ভ করার জন্য i :=maxVal, যখন i> minVal, আপডেট করুন (i 1 কমিয়ে দিন), করুন −
        • যদি i
        • লুপ থেকে বেরিয়ে আসুন
      • যদি x mod i 0 এর মত হয়, তাহলে −
        • রিটার্ন এক্স মোড 1337
  • 9 রিটার্ন
  • আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    উদাহরণ

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long int lli;
    class Solution {
    public:
       int largestPalindrome(int n) {
          int maxVal = pow(10, n) - 1;
          int minVal = maxVal / 10;
          for(int h = maxVal; h > minVal; h--){
             lli left = h;
             lli right = 0;
             for(lli i = h; i > 0; right = right * 10 + i % 10, left*= 10, i/= 10);
             lli x = left + right;
             for(int i = maxVal; i > minVal; i--){
                if(i < x / i) break;
                if(x % i == 0) return x % 1337;
             }
          }
          return 9;
       }
    };
    main(){
       Solution ob;
       cout << (ob.largestPalindrome(3));
    }

    ইনপুট

    3

    আউটপুট

    123

    1. C++-এ K সংখ্যার N'th প্যালিনড্রোম

    2. C++ এ X দ্বারা বিভাজ্য K সংখ্যার বৃহত্তম সংখ্যা

    3. C++ এ পরবর্তী প্যালিনড্রোম প্রাইম খুঁজুন

    4. C++ এ সবচেয়ে বড় BST সাবট্রি