ধরুন আমরা 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
- লুপ থেকে বেরিয়ে আসুন
- যদি i
- যদি x mod i 0 এর মত হয়, তাহলে −
- রিটার্ন এক্স মোড 1337
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#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