এই আর্টিকেলে, আমরা N দিয়ে বিভাজ্য রিপিটেড ইউনিটের সংখ্যা বের করার কথা আলোচনা করব। রিপিটেড ইউনিট হল শুধু ১-এর পুনরাবৃত্ত সংখ্যা, R(k) কে রিপিটেড ইউনিট বলা হয় যেখানে k হল ১-গুলোর দৈর্ঘ্য। যেমন R(4) = 1111। তো আমাদের k-এর ন্যূনতম মান বের করতে হবে যেন R(k), N দিয়ে বিভাজ্য হয়, উদাহরণস্বরূপ −
ইনপুট : N = 13 আউটপুট : k = 6 ব্যাখ্যা : R(6) অর্থাৎ 111111, 13 দিয়ে বিভাজ্য। ইনপুট : N = 31 আউটপুট : k = 15
সমাধানের পদ্ধতি
আপনি এই সমস্যা k=1 থেকে শুরু করে প্রতিটি ভ্যালু চেক করে সমাধান করতে পারেন যেখানে R(k), N দিয়ে বিভাজ্য। কিন্তু এই সমাধান দিয়ে আমরা জানতে পারব না যে N কোনো R(k) দিয়ে বিভাজ্য কি না। এতে প্রোগ্রাম খুব জটিল হবে এবং হয়তো কাজ করবেনা।
এই প্রোগ্রামের সমাধানের একটি দক্ষ পদ্ধতি হল,
- চেক করুন N, ১০-এর সাথে কো-প্রাইম কি না।
- যদি না হয়, তবে R(k) যেকোনো k-এর ভ্যালুর জন্য N দিয়ে বিভাজ্য হবে না।
- যদি হ্যাঁ হয়, তবে প্রতিটি রিপিটেড ইউনিট R(1), R(2), R(3)... এর জন্য, R(i) এবং N-র বিভাজনের রিমেইন্ডার ক্যালকুলেট করুন, তো n সংখ্যক রিমেইন্ডার থাকবে।
- R(i) এবং R(j)-র জন্য একই রিমেইন্ডার মান খুঁজুন, যেখানে R(i) এবং R(j) দুটি রিপিটেড ইউনিট যাতে R(i) - R(j), N দিয়ে বিভাজ্য হয়।
- R(i) এবং R(j)-র পার্থক্য হবে রিপিটেড ইউনিট কোনো পাওয়ার অফ ১০ দিয়ে গুণিত, কিন্তু ১০ এবং N আপেক্ষিকভাবে প্রাইম, তাই R(k), N দিয়ে বিভাজ্য হবে।
উদাহরণ প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
int main() {
int N = 31;
int k = 1;
// চেক করা N, ১০-এর সাথে কো-প্রাইম কি না।
if (N % 2 == 0 || N % 5 == 0) {
k = 0;
} else {
int r = 1;
int power = 1;
// চেক করা যতক্ষণ না রিমেইন্ডার N দিয়ে বিভাজ্য হয়।
while (r % N != 0) {
k++;
power = power * 10 % N;
r = (r + power) % N;
}
}
cout << "Value for k : " << k;
return 0;
}
আউটপুট
Value for k : 15
উপসংহার
এই আর্টিকেলে, আমরা k-এর মান বের করার কথা আলোচনা করেছি R(k)-এর জন্য, যেখানে R(k) হল দেয়া N দিয়ে বিভাজ্য রিপিটেড ইউনিট। আমরা k-এর মান বের করার একটি আপটিমিস্টিক পদ্ধতি আলোচনা করেছি। আমরা এই সমস্যা সমাধান করার C++ কোডও আলোচনা করেছি। আপনি এই কোড যেকোনো অন্য ল্যাঙ্গুয়েজে লিখতে পারেন যেমন Java, C, Python, ইত্যাদি। আশা করি আপনি এই আর্টিকেলটিকে সহায়ক খুঁজে পাবেন।