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

C++-এ বড় সংখ্যার রোটেশন গুলোর মধ্যে ৪ দিয়ে বিভাজ্য কতটি আছে তা গণনা


আমাদের একটি বড় সংখ্যা দেওয়া আছে। লক্ষ্য হলো এই সংখ্যার রোটেশন (rotation) গুলোর মধ্যে ৪ দিয়ে বিভাজ্য কতটি আছে তা বের করা।

রোটেশন বারবার করা যাবে না, তাই আমরা ৪ দিয়ে বিভাজ্যতার নিয়ম ব্যবহার করব: শেষ দুই ডিজিট যদি ৪ দিয়ে বিভাজ্য হয়, তবে পুরো সংখ্যও ৪ দিয়ে বিভাজ্য। উদাহরণস্বরূপ, ১২৩৪ এর রোটেশন গুলো: ১২৩৪, ৪১২৩, ৩৪১২, ২৩৪১। এর মধ্যে ৩৪১২, ৪ দিয়ে বিভাজ্য কারণ শেষ দুটি ডিজিট ১২, ৪ দিয়ে বিভাজ্য।

উদাহরণ দিয়ে বুঝি

ইনপুট − num=15324

আউটপুট − ৪ দিয়ে বিভাজ্য রোটেশন সংখ্যা: ২

ব্যাখ্যা − রোটেশন গুলো: ১৫৩২৪, ৪১৫৩২, ২৪১৫৩, ৩২৪১৫, ৫৩২৪১। এর মধ্যে ১৫৩২৪ এবং ৪১৫৩২, ৪ দিয়ে বিভাজ্য।

ইনপুট − num=848484

আউটপুট − ৪ দিয়ে বিভাজ্য রোটেশন সংখ্যা: ৬

ব্যাখ্যা − রোটেশন গুলো: ৮৪৮৪৮৪, ৪৮৪৮৪৮, ৮৪৮৪৮৪, ৪৮৪৮৪৮, ৮৪৮৪৮৪, ৪৮৪৮৪৮। সব রোটেশন ৪ দিয়ে বিভাজ্য।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

সংখ্যাকে স্ট্রিং-এ কনভার্ট করে লুপ দিয়ে ঘুরব। প্রতিটি দুই ডিজিটের জোড়াকে ইন্টিজারে কনভার্ট করে ৪ দিয়ে বিভাজ্যতা চেক করব। বিভাজ্য হলে কাউন্ট বাড়াব।

  • সংখ্যা long long num হিসেবে নিন।
  • Rotation_4(long long num) ফাংশন সংখ্যা নিয়ে ৪ দিয়ে বিভাজ্য রোটেশন কাউন্ট রিটার্ন করে।
  • স্ট্রিং-এ কনভার্ট করুন: str = to_string(num)।
  • ডিজিট সংখ্যা: length = str.length()।
  • দুই ডিজিটের ইন্টিজার মান রাখার জন্য digit=0, কাউন্টের জন্য count=0।
  • যদি length == 1: একক ডিজিটকে ইন্টিজারে কনভার্ট করে ৪ দিয়ে বিভাজ্যতা চেক করুন, ১ বা ০ রিটার্ন করুন।
  • i=0 থেকে length-1 পর্যন্ত লুপে দুই ক্যারেক্টারকে ইন্টিজারে কনভার্ট করুন: digit = (str[i]-'0')*10 + (str[i+1]-'0')। প্রতিটি জোড়া রোটেশনে শেষ দুটি ডিজিট হয়। ৪ দিয়ে বিভাজ্য হলে কাউন্ট বাড়ান।
  • শেষ ডিজিট এবং প্রথম ডিজিট দিয়ে বানানো জোড়াও চেক করুন।
  • শেষে count রিটার্ন করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

int Rotation_4(long long num) {
    string str = to_string(num);
    int length = str.length();
    int digit = 0, count = 0;
    if (length == 1) {
        digit = (str.at(0) - '0');
        if (digit % 4 == 0) return 1;
        else return 0;
    }
    for (int i = 0; i < (length - 1); i++) {
        digit = (str.at(i) - '0') * 10 + (str.at(i + 1) - '0');
        if (digit % 4 == 0) count++;
    }
    digit = (str.at(length - 1) - '0') * 10 + (str.at(0) - '0');
    if (digit % 4 == 0) count++;
    return count;
}

int main() {
    long long num = 24040;
    cout << "Count of rotations divisible by 4 are: " << Rotation_4(num);
    return 0;
}

আউটপুট

Count of rotations divisible by 4 are: 4
  1. সাব-ম্যাট্রিক্সের সম k দিয়ে বিভাজ্য হলে তাদের সংখ্যা গণনা (C++)

  2. সাবঅ্রে যার গুণফল k দিয়ে বিভাজ্য C++-এ

  3. C++-এ বড় সংখ্যার রোটেশন গুলোর মধ্যে ৮ দিয়ে বিভাজ্য কতটি আছে তা গণনা

  4. C++-এ সর্টেড ও রোটেটেড লিংকড লিস্টে রোটেশনের সংখ্যা গণনা