দুটি পজিটিভ সংখ্যা N এবং M দেওয়া আছে। এমন M-তম সংখ্যা বের করতে হবে যেটির আঙ্কিক যোগফল (ডিজিট সম) বারবার করলে একদিকের সংখ্যা N হয়।
উদাহরণ
ইনপুট: N = 4, M = 6 → আউটপুট: 49
চেক: ৪৯ → ৪+৯=১৩ → ১+৩=৪ ✓
প্যাটার্ন ও সূত্র
যেসব সংখ্যার রিপিটেড ডিজিট সম N হয়, সেগুলো 9-এর গুণিতক প্লাস N হয়।
সূত্র: M-th number = (M-1) × 9 + N
ব্যাখ্যা
N=4এর জন্য সিকোয়েন্স: ৪, ১৩, ২২, ৩১, ৪০, ৪৯, ৫৮, ৬৭, ৭৬, ৮৫, ৯৪, ১০৩, ...- প্রতিটি পরের সংখ্যা = আগের + ৯।
- কারণ: ৯ যোগ করলে ডিজিট সম অপরিবর্তিত থাকে (মডুলো ৯)।
C++ প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 4, m = 6;
int mNumber = (m - 1) * 9 + n;
cout << m << "-th number whose repeated sum of digits of a number is " << n << " is " << mNumber;
return 0;
}
আউটপুট
6-th number whose repeated sum of digits of a number is 4 is 49
মূল পয়েন্ট
- O(1) টাইম ও স্পেস — কোনো লুপ বা রিকার্শন লাগে না।
- ডিজিটাল রুট (Digital Root) কনসেপ্ট:
dr(x) = 1 + (x-1)%9(x>0)। N১ থেকে ৯ পর্যন্ত হতে হবে (ডিজিটাল রুটের রেঞ্জ)।N=9হলে সিকোয়েন্স: ৯, ১৮, ২৭, ৩৬... (৯-এর গুণিতক) → সূত্র:(M-1)*9 + 9 = M*9।
জেনেরিক ফাংশন
int findMthNumber(int N, int M) {
if (N < 1 || N > 9) return -1; // Invalid digital root
return (M - 1) * 9 + N;
}