কম্পিউটার

C++ এ নির্দিষ্ট নিয়ম অনুসরণ করে N কে 1 এ কমাতে প্রয়োজনীয় ধাপের সংখ্যা গণনা করুন


আমাদের একটি সংখ্যা দেওয়া হয়েছে। লক্ষ্য হল নিয়মগুলি অনুসরণ করে সংখ্যাটিকে 1 এ কমাতে প্রয়োজনীয় পদক্ষেপের সংখ্যা গণনা করা -

  • যদি সংখ্যাটি 2 এর শক্তি হয়, তাহলে এটিকে অর্ধেক কমিয়ে দিন।

  • অন্যথায় এটিকে N-তে কমিয়ে দিন (2 এর নিকটতম শক্তি যা N-এর চেয়ে কম)।

ধাপ 1-এর জন্য, আমরা পরীক্ষা করব N এর শক্তি 2 আছে কিনা, ceil(log2(N)), ফ্লোর(log2(N)) একই ফলাফল দেয় কিনা তা পরীক্ষা করে। যদি হ্যাঁ হয় তাহলে N=N/3, অপারেশনের সংখ্যা বৃদ্ধি।

যদি ধাপ 1 এর ফলাফল মিথ্যা হয় তবে আমরা ধাপ 2 সম্পাদন করব এবং N থেকে N থেকে 2 কমের নিকটতম শক্তি বিয়োগ করব। N থেকে 2 কমের নিকটতম শক্তি হিসাবে গণনা করা হবে −

x=floor(log2(N)) → যখন N 2 এর শক্তি না হয়, log2(N) ফ্লোটিং পয়েন্টের মান দেয়, ফ্লোর এটিকে N-এর চেয়ে কম কাছাকাছি পূর্ণসংখ্যাতে কমিয়ে দেয়।

এখন N=N- pow(2,x) → pow(2,x) N থেকে 2 কম পাওয়ার দেবে। N কমিয়ে দিন।

উদাহরণ দিয়ে বোঝা যাক।

ইনপুট − N=20

আউটপুট -:প্রয়োজনীয় ধাপের সংখ্যা − 3

ব্যাখ্যা − N=20

20 is not power of 2. Step 2. Reduce nearest power of 2 less than N from N. N=20- 16=4. Count=1.
4 is power of 2. Step 1. Reduce N to its half. N=4/2=2. Count=2.
2 is power of 2. Step 1. Reduce N to its half. N=2/2=1. Count=3.
N is 1 total step count=3.

ইনপুট − N=32

আউটপুট প্রয়োজনীয় ধাপের সংখ্যা − 5

ব্যাখ্যা − N=32

32 is power of 2. Step 1. Reduce N to its half. N=32/2=16. Count=1.
16 is power of 2. Step 1. Reduce N to its half. N=16/2=8. Count=2.
8 is power of 2. Step 1. Reduce N to its half. N=8/2=4. Count=3.
4 is power of 2. Step 1. Reduce N to its half. N=4/2=2. Count=4.
2 is power of 2. Step 1. Reduce N to its half. N=2/2=1. Count=5.
N is 1 total step count=5.

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

  • একটি পূর্ণসংখ্যা মান সংরক্ষণের জন্য আমরা একটি পূর্ণসংখ্যা N নিই।

  • ফাংশন stepCount(int n) N নেয় এবং এটিকে 1 এ কমাতে প্রয়োজনীয় ধাপের গণনা ফেরত দেয়।

  • 0 হিসাবে পদক্ষেপের প্রাথমিক গণনা নিন।

  • এখন যখন(n!=1) n এর মান অনুযায়ী 1, এবং 2 উভয় ধাপই সম্পাদন করুন।

  • যদি n এর শক্তি 2 হয় ( ceil(log2(n))==floor(log2(n)) সত্য হবে , n কমিয়ে অর্ধেক করুন। সংখ্যা বৃদ্ধি।

  • যদি 2 এর শক্তি না হয় তবে n কে pow(2,x) দ্বারা কমিয়ে দিন যেখানে x ফ্লোর(log2(n))। সংখ্যা বৃদ্ধি।

  • যখন লুপ শেষ হবে তখন গণনায় সঞ্চালিত অপারেশনের সংখ্যা থাকবে।

  • পছন্দসই ফলাফল হিসাবে রিটার্ন গণনা।

উদাহরণ

#include <iostream>
#include <math.h>
using namespace std;
// Function to return number of steps for reduction
int stepCount(int n){
   int count=0;
   while(n!=1){
      if(ceil(log2(n))==floor(log2(n))) //if n is power of 2 then this is true{
         n=n/2; //reduce n to half
         count++;
      } else {
         int x=floor(log2(n)); //floor value
         n=n-(pow(2,x)); //2^x is nearest power of 2 which is less than n
         count++;
      }
   }
   return count;
}
int main(){
   int N = 96;
   cout <<"Count of steps required to reduce N to 1:"<<stepCount(N);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
Count of steps required to reduce N to 1:6

  1. C++ এ একটি আয়তক্ষেত্রে বর্গক্ষেত্রের সংখ্যা গণনা করুন

  2. একটি সংখ্যা 8 এর শক্তি কিনা তা C++ এ পরীক্ষা করুন

  3. একটি সংখ্যা C++ এ অন্য একটি সংখ্যার শক্তি কিনা তা পরীক্ষা করুন

  4. একটি সংখ্যার শক্তি গণনা করার জন্য C++ প্রোগ্রাম