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

N পর্যন্ত লগ মান বের করতে ন্যূনতম লগ ভ্যালুর সংখ্যা বের করা C++-তে


যেহেতু আমরা জানি log(x*y) = log(x) + log(y)। তাই আমরা দেখব ১ থেকে N পর্যন্ত সব লগ মান বের করতে ন্যূনতম কতগুলো লগ ভ্যালু লাগবে। তাই যদি N হয় 6, তবে আউটপুট হবে 3, কারণ log(1) থেকে log(6) পর্যন্ত তিনটি লগ ভ্যালু লাগবে log(1) বাদে। কারণ log(1) সবসময় ০, তাই এটিকে বাদ দিন, এখন log(2) এবং log(3) এর জন্য আমাদের বের করতে হবে। তারপর log(4) এর জন্য এটি log(2) + log(2), কিন্তু log(2) এর মান জানা, তাই আবার হিসাব করতে হবে না, log(5) এর জন্য আমাদের বের করতে হবে। তাই এখন কাউন্ট হল ৩, log(6) = log(3) + log(2), তারা ইতিমধ্যে জানা, তাই কাউন্ট ৩।

এই সমস্যাটি ১ থেকে N পরিসরের মৌলিক সংখ্যা বের করার সমস্যায় রিডিউস করা যায়, কারণ আমরা দেখতে পাচ্ছি যে মৌলিক সংখ্যাগুলোর জন্য লগ ভ্যালু স্বতন্ত্রভাবে বের করতে হয়। অন্যথায় ফ্যাক্টরাইজ করে বের করতে হয়।

উদাহরণ

#include <iostream>
#include <vector>
#define MAX 1000005
using namespace std;

vector<int> prime(MAX, 1);

void seive(int N) {
    prime[0] = prime[1] = 0;
    for (int i = 2; i <= N; i++) {
        if (prime[i] == 1) {
            for (int j = 2; i * j <= N; j++)
                prime[i * j] = 0;
        }
    }
}

int numberOfLogs(int N) {
    int log_count = 0;
    seive(N);
    for (int i = 1; i <= N; i++) {
        if (prime[i] == 1)
            log_count++;
    }
    return log_count;
}

int main() {
    int N = 8;
    cout << "Minimum number of log counts required: " << numberOfLogs(N) << endl;
}

আউটপুট

Minimum number of log counts required: 4

  1. সংখ্যাকে সম্পূর্ণ বর্গ করতে ন্যূনতম কত দিয়ে ভাগ করতে হবে তা বের করা C++-তে

  2. C++ ব্যবহার করে n তৈরির জন্য ন্যূনতম অক্ষর সংখ্যা

  3. C++ ব্যবহার করে একটি সংখ্যার ফ্যাক্টরের ন্যূনতম যোগফল বের করা

  4. সি++ প্রোগ্রাম: যেকোনো বীজগাণিতিক অভিব্যক্তির ন্যূনতম মান (Minimum Value) বের করা