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

C++ L-তম এবং R-তম ইনডেক্সের মাঝপথে শুধু সেট বিট থাকা সংখ্যা বের করুন


দেওয়া সমস্যায়, আমাদের একটি সংখ্যার মান বের করতে হবে যার দেওয়া রেঞ্জ L, R-এর মাঝপথে সব সেট বিট রয়েছে। উদাহরণস্বরূপ:

Input: L = 1, R = 5 Output: 62 Explanation: দেওয়া L এবং R-এর বাইনারি রূপ 0..0111110 Input: L = 1, R = 4 Output: 30 Explanation: দেওয়া L এবং R-এর বাইনারি রূপ 0..11110

সমাধানের পদ্ধতি

দেওয়া সমস্যায়, আমরা দুটি পদ্ধতি আলোচনা করব: ব্রুট ফোর্স এবং দক্ষ পদ্ধতি।

ব্রুট ফোর্স

এই পদ্ধতিতে, আমরা সিম্পলি দেওয়া রেঞ্জের মাধ্যমে ট্রাভার্স করব এবং রেঞ্জে থাকা সব ২-এর ঘাত যোগ করব, এবং সেটিই হবে আমাদের উত্তর।

উদাহরণ

#include<bits/stdc++.h> using namespace std; int main() {    int L = 1, R = 3; // দেওয়া রেঞ্জ    int ans = 0; // আমাদের উত্তর    for(int i = L; i <= R; i++) // পুরো রেঞ্জ ট্রাভার্স       ans += pow(2, i); // মানগুলো উত্তর যোগ করুন।    cout << ans << "\n"; }

আউটপুট

14

এই পদ্ধতিতে, আমরা সিম্পলি রেঞ্জ ট্রাভার্স করি এবং রেঞ্জের সংখ্যাগুলোর ২-এর ঘাত যোগ করি। এই প্রোগ্রামের টাইম কমপ্লেক্সিটি O(N), যেখানে N হল আমাদের রেঞ্জের আকার। কিন্তু আমরা প্রদত্ত প্রশ্নে বিটের জ্ঞান প্রয়োগ করে টাইম কমপ্লেক্সিটি আরও বাড়াতে পারি।

দক্ষ পদ্ধতি

এই পদ্ধতিতে, আমরা সিম্পলি একটি সূত্র তৈরি করব যা আমাদের উত্তর ক্যালকুলেট করবে।

উদাহরণ

#include<bits/stdc++.h> using namespace std; int main() {    int L = 1, R = 3; // দেওয়া রেঞ্জ    int ans = 0; // আমাদের উত্তর    for(int i = L; i <= R; i++) // পুরো রেঞ্জ ট্রাভার্স       ans += pow(2, i); // মানগুলো উত্তর যোগ করুন।    cout << ans << "\n"; }

আউটপুট

14

এই পদ্ধতিতে, আমরা উত্তর ক্যালকুলেট করার জন্য একটি সূত্র তৈরি করি।

উপরোক্ত কোডের ব্যাখ্যা

যেহেতু আপনি জানেন, আমাদের দেয়া রেঞ্জে সেট বিট থাকা সংখ্যা ক্যালকুলেট করতে হচ্ছে, তাই এই পদ্ধতিতে আমরা একটি সংখ্যা বের করি যার সব বিট ০ থেকে R পর্যন্ত সেট। তারপর আমাদের একটি সংখ্যা বিয়োগ করতে হবে যার সব বিট ১ থেকে (L-1) পর্যন্ত সেট, এবং এভাবেই আমরা এই পর্যবেক্ষণ থেকে সূত্র তৈরি করি। দেয়া কোডের ওভারঅল টাইম কমপ্লেক্সিটি O(1) যা কনস্ট্যান্ট টাইম কমপ্লেক্সিটি, অর্থাৎ আমরা যেকোনো উত্তর কনস্ট্যান্ট টাইমে ক্যালকুলেট করতে পারি।

উপসংহার

এই আর্টিকেলে, আমরা "L-তম এবং R-তম ইনডেক্সের মাঝপথে শুধু সেট বিট থাকা সংখ্যা" জন্য একটি প্রোগ্রাম তৈরি করেছি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সম্পূর্ণ পদ্ধতি (সাধারণ ও দক্ষ) শিখেছি। একই প্রোগ্রামটি C, Java, Python এবং অন্যান্য ভাষায়ও লিখা যায়। আশা করি আপনি এই আর্টিকেলটিকে উপকারী পাবেন।


  1. C++ দিয়ে লাইনের এক ছোরা এবং মিডপয়েন্ট দিয়ে অন্য ছোরা বের করা

  2. C++-এ সেটে রিফ্লেক্সিভ রিলেশন সংখ্যা বের করুন

  3. C++-এ K ইনভার্সন সহ পারমুটেশন সংখ্যা বের করুন

  4. C++-এ ফুটবলে পেন্টাগন এবং হেক্সাগন সংখ্যা বের করুন