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

C++-এ একটি নাম্বার ৩-এর গুণফল কিনা চেক করার ইফিশিয়েন্ট মেথড

এখানে, আমাদের একটি প্রোগ্রাম লিখতে হবে যা দেওয়া নাম্বারটি ৩-এর গুণফল কিনা তা চেক করবে।

এক জেনারেল সমাধান হল ট্রivial সমাধান, নাম্বারের সব ডিজিট যোগ করা এবং যদি সমটি ৩-এর গুণফল হয় তবে নাম্বারটি ৩ দিয়ে বিভাজ্য অন্যথায় না। কিন্তু এই সমাধানটি সবচেয়ে ইফিশিয়েন্ট নয়।

একটি ইফিশিয়েন্ট সমাধান হবে নাম্বারের বাইনারি রিপ্রেজেন্টেশনে সেট বিটের কাউন্ট ব্যবহার করা। যদি অড পজিশনে সেট বিটের কাউন্ট এবং ইভেন পজিশনে সেট বিটের কাউন্টের পার্থক্য ৩-এর গুণফল হয় তবে নাম্বারটি ৩-এর গুণফল।

আমরা একটি লুপ ব্যবহার করব এবং নাম্বারের বিটগুলো শিফ্ট করব এবং ইভেন এবং অড পজিশনে সেট বিটের সংখ্যা কাউন্ট করব। শেষে, আমরা চেক করব পার্থক্যটি ৩-এর গুণফল কিনা।

একটি উদাহরণ দিয়ে ইমপ্লিমেন্টেশন বুঝতে পারি,

ইনপুট

n = 24

আউটপুট

even

ব্যাখ্যা

binary representation = 11000
Even set bits = 1, odd set bits = 1. Difference = 0, it is divisible.

আমাদের সমাধানের ইমপ্লিমেন্টেশন দেখানোর প্রোগ্রাম,

উদাহরণ

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

int isDivisibleBy3(int n) {
    int oddBitCount = 0;
    int evenBitCount = 0;
    if (n < 0)
        n = -n;
    if (n == 0)
        return 1;
    if (n == 1)
        return 0;
    while (n) {
        if (n & 1)
            oddBitCount++;
        if (n & 2)
            evenBitCount++;
        n = n >> 2;
    }
    return isDivisibleBy3(oddBitCount - evenBitCount);
}

int main() {
    int n = 1241;
    cout << "The number " << n;
    if (isDivisibleBy3(n))
        cout << " is a multiple of 3";
    else
        cout << " is not a multiple of 3";
    return 0;
}

আউটপুট

The number 1241 is not a multiple of 3
  1. C++ প্রোগ্রাম: সংখ্যা অন্য একটি সংখ্যার পাওয়ার কিনা চেক করা

  2. C++ প্রোগ্রাম: বড় সংখ্যা ২০ দিয়ে বিভাজ্য কিনা চেক (স্ট্রিং ইনপুট)

  3. C++-এ N পেন্টাগোনাল নাম্বার কিনা তা যাচাই করার প্রোগ্রাম

  4. আর্মস্ট্রং নম্বর (Armstrong Number) চেক করার C++ প্রোগ্রাম