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

রিপিটেড ইউনিট ডিভিজিবিলিটি C++-এ

এই আর্টিকেলে, আমরা 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, ইত্যাদি। আশা করি আপনি এই আর্টিকেলটিকে সহায়ক খুঁজে পাবেন।

  1. OpenCV-এ C++ ব্যবহার করে উপবৃত্ত আঁকা

  2. OpenCV-এ C++ ব্যবহার করে রেখা আঁকা

  3. C++ ব্যবহার করে N ফ্যাক্টোরিয়ালের যোগফলের একক দশমিক স্থান বের করা

  4. C++-এ ট্রান্সলেশন ইউনিট (Translation Unit) কী?