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

সিরিজ 1, 2, 2, 4, 4, 4, 4, 8…-এর Nতম টার্ম খুঁজে বের করা C++-এ

এই সমস্যায়, আমাদের একটি পূর্ণসংখ্যা N দেওয়া আছে। আমাদের কাজ হল সিরিজ 1, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8…-এর Nতম টার্ম বের করার প্রোগ্রাম লিখা।

উদাহরণ

ইনপুট

N = 7

আউটপুট

4

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

এই সমস্যা সমাধানের একটি সহজ পদ্ধতি হল লুপ ব্যবহার করে Nতম পজিশনের টার্ম বের করা। টার্মগুলো প্রতিটি ইটারেশনে ডাবল হয়। এবং টার্ম কাউন্টে যোগ হয়।

প্রোগ্রাম উদাহরণ (সহজ পদ্ধতি)

#include <iostream>
using namespace std;

int calcNthTerm(int N) {
    int termCounter = 0, termValue = 1;
    int k = 1; // Missing variable declaration fixed
    
    while (termCounter < N) {
        termCounter += k;
        termValue *= 2;
        k *= 2; // k also doubles each time
    }
    
    return termValue / 2;
}

int main() {
    int N = 10;
    cout << N << "th term of the series is " << calcNthTerm(N);
    return 0;
}

আউটপুট

10th term of the series is 8

দক্ষ পদ্ধতি

এই সমস্যা সমাধানের একটি দক্ষ পদ্ধতি হল সিরিজের সাধারণ টার্ম বের করা।

এখানে টার্মগুলো এবং তাদের শেষ ইন্ডেক্স:

১ → শেষ ইন্ডেক্স = ১
২ → শেষ ইন্ডেক্স = ৩
৪ → শেষ ইন্ডেক্স = ৭
৮ → শেষ ইন্ডেক্স = ১৫
...
T(N) → শেষ ইন্ডেক্স = 2×T(N) - 1

এছাড়া T(N) সবসময় ২-এর ঘাত, অর্থাৎ T(N) = 2ᵐ। 2ᵐ সিরিজে থাকে ইন্ডেক্স 2^(m+1)-1 পর্যন্ত।

টার্ম বের করতে আমরা N ব্যবহার করে 2^m - 1 এর মান বের করতে পারি।

এটি করে 2^m - 1 < N। সেজন্য m < log₂(N + 1)।

প্রোগ্রাম উদাহরণ (দক্ষ পদ্ধতি)

#include <iostream>
#include <math.h>
using namespace std;

int calcNthTerm(int N) {
    return pow(2, floor(log(N + 1) / log(2)));
}

int main() {
    int N = 10;
    cout << N << "th term of the series is " << calcNthTerm(N);
    return 0;
}

আউটপুট

10th term of the series is 8
  1. C++-এ সিরিজ 3, 12, 29, 54, 87...-এর N-তম টার্ম বের করার প্রোগ্রাম

  2. C++-এ সিরিজ 3, 6, 18, 24...-এর N-তম টার্ম বের করার প্রোগ্রাম

  3. C++-এ সিরিজ 3, 5, 21, 51, 95...-এর N-তম টার্ম বের করার প্রোগ্রাম

  4. C++-এ দেওয়া সিরিজে N-তম পদ বের করার প্রোগ্রাম